93 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|