|
|
- using UnityEngine;
-
- public enum WaterQuality {
- High = 2,
- Medium = 1,
- Low = 0,
- }
-
- [ExecuteInEditMode]
- public class WaterBase : MonoBehaviour
- {
- public Material sharedMaterial;
- public WaterQuality waterQuality = WaterQuality.High;
- public bool edgeBlend = true;
-
- public void UpdateShader()
- {
- if(waterQuality > WaterQuality.Medium)
- sharedMaterial.shader.maximumLOD = 501;
- else if(waterQuality> WaterQuality.Low)
- sharedMaterial.shader.maximumLOD = 301;
- else
- sharedMaterial.shader.maximumLOD = 201;
-
- // If the system does not support depth textures (ie. NaCl), turn off edge bleeding,
- // as the shader will render everything as transparent if the depth texture is not valid.
- if (!SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.Depth))
- edgeBlend = false;
-
- if(edgeBlend)
- {
- Shader.EnableKeyword("WATER_EDGEBLEND_ON");
- Shader.DisableKeyword("WATER_EDGEBLEND_OFF");
- // just to make sure (some peeps might forget to add a water tile to the patches)
- if (Camera.main)
- Camera.main.depthTextureMode |= DepthTextureMode.Depth;
- }
- else
- {
- Shader.EnableKeyword("WATER_EDGEBLEND_OFF");
- Shader.DisableKeyword("WATER_EDGEBLEND_ON");
- }
- }
-
- public void WaterTileBeingRendered (Transform tr, Camera currentCam)
- {
- if (currentCam && edgeBlend)
- currentCam.depthTextureMode |= DepthTextureMode.Depth;
- }
-
- public void Update ()
- {
- if(sharedMaterial)
- UpdateShader();
- }
- }
|