Files
2026-02-21 16:45:37 +08:00

93 lines
1.9 KiB
C#

using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class SnowManager : MonoBehaviour
{
public float particleTurnOn = 0.0001f;
public List<ParticleSystem> particles;
public List<Material> 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);
}
}
}
}