using UnityEngine; // Sets up transformation matrices to scale&scroll water waves // for the case where graphics card does not support vertex programs. [ExecuteInEditMode] public class WaterSimple : MonoBehaviour { void Update() { if (!renderer) return; Material mat = renderer.sharedMaterial; if (!mat) return; Vector4 waveSpeed = mat.GetVector("WaveSpeed"); float waveScale = mat.GetFloat("_WaveScale"); float t = Time.time / 20.0f; Vector4 offset4 = waveSpeed * (t * waveScale); Vector4 offsetClamped = new Vector4(Mathf.Repeat(offset4.x, 1.0f), Mathf.Repeat(offset4.y, 1.0f), Mathf.Repeat(offset4.z, 1.0f), Mathf.Repeat(offset4.w, 1.0f)); mat.SetVector("_WaveOffset", offsetClamped); Vector3 scale = new Vector3(1.0f / waveScale, 1.0f / waveScale, 1); Matrix4x4 scrollMatrix = Matrix4x4.TRS(new Vector3(offsetClamped.x, offsetClamped.y, 0), Quaternion.identity, scale); mat.SetMatrix("_WaveMatrix", scrollMatrix); scrollMatrix = Matrix4x4.TRS(new Vector3(offsetClamped.z, offsetClamped.w, 0), Quaternion.identity, scale * 0.45f); mat.SetMatrix("_WaveMatrix2", scrollMatrix); } }