CTI_CustomWind.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using UnityEngine;
  2. using System.Collections;
  3. namespace CTI {
  4. [RequireComponent (typeof (WindZone))]
  5. public class CTI_CustomWind : MonoBehaviour {
  6. private WindZone m_WindZone;
  7. private Vector3 WindDirection;
  8. private float WindStrength;
  9. private float WindTurbulence;
  10. public float WindMultiplier = 1.0f;
  11. private bool init = false;
  12. private int TerrainLODWindPID;
  13. void Init () {
  14. m_WindZone = GetComponent<WindZone>();
  15. TerrainLODWindPID = Shader.PropertyToID("_TerrainLODWind");
  16. }
  17. void OnValidate () {
  18. Update ();
  19. }
  20. void Update () {
  21. if (!init) {
  22. Init ();
  23. }
  24. WindDirection = this.transform.forward;
  25. if(m_WindZone == null) {
  26. m_WindZone = GetComponent<WindZone>();
  27. }
  28. WindStrength = m_WindZone.windMain * WindMultiplier;
  29. WindStrength += m_WindZone.windPulseMagnitude * (1.0f + Mathf.Sin(Time.time * m_WindZone.windPulseFrequency) + 1.0f + Mathf.Sin(Time.time * m_WindZone.windPulseFrequency * 3.0f) ) * 0.5f;
  30. WindTurbulence = m_WindZone.windTurbulence * m_WindZone.windMain * WindMultiplier;
  31. WindDirection.x *= WindStrength;
  32. WindDirection.y *= WindStrength;
  33. WindDirection.z *= WindStrength;
  34. Shader.SetGlobalVector(TerrainLODWindPID, new Vector4(WindDirection.x, WindDirection.y, WindDirection.z, WindTurbulence) );
  35. }
  36. }
  37. }