using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] public class SnowManager : MonoBehaviour { public float particleTurnOn = 0.0001f; public List particles; public List materials; public int particlesSize; public bool particlesCollapsed; public int materialsSize; public bool materialsCollapsed; public float snowValue; public float snowValueOld; public float snowGrassValue; public float snowGrassValueOld; public float snowGrassValueMax = 1f; public float snowGrassValueOldMax; public Texture2D snowGrassTex; public Texture2D snowGrassTexOld; public float snowX; public float snowXOld; public float snowY; public float snowYOld; public void Start() { Shader.SetGlobalFloat("_SnowAmount", Mathf.Clamp(snowValue * snowGrassValue, 0f, snowGrassValueMax)); Shader.SetGlobalTexture("_SnowTex", snowGrassTex); } public void Update() { if (snowGrassTex != snowGrassTexOld) { snowGrassTexOld = snowGrassTex; Shader.SetGlobalTexture("_SnowTex", snowGrassTex); } if (snowGrassValue == snowGrassValueOld && snowGrassValueMax == snowGrassValueOldMax && snowValue == snowValueOld) { return; } snowValueOld = snowValue; snowGrassValueOld = snowGrassValue; snowGrassValueOldMax = snowGrassValueMax; Shader.SetGlobalFloat("_SnowAmount", Mathf.Clamp(snowValue * snowGrassValue, 0f, snowGrassValueMax)); foreach (Material material in materials) { if (material != null) { material.SetFloat("_SnowAmount", snowValue); } } if (snowValue > particleTurnOn) { foreach (ParticleSystem particle in particles) { if (particle != null && !particle.gameObject.activeSelf) { particle.gameObject.SetActive(true); } } return; } foreach (ParticleSystem particle2 in particles) { if (particle2 != null && particle2.gameObject.activeSelf) { particle2.gameObject.SetActive(false); } } } }