From c2b26c0491886b99f422e830cd9ec1637a4ddc2e Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 1 Mar 2026 09:36:29 +0800 Subject: first --- Assets/Scripts/Camera/BindCameraHeightToShader.cs | 53 +++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Assets/Scripts/Camera/BindCameraHeightToShader.cs (limited to 'Assets/Scripts/Camera/BindCameraHeightToShader.cs') diff --git a/Assets/Scripts/Camera/BindCameraHeightToShader.cs b/Assets/Scripts/Camera/BindCameraHeightToShader.cs new file mode 100644 index 0000000..4381e2c --- /dev/null +++ b/Assets/Scripts/Camera/BindCameraHeightToShader.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace Camera +{ + public class BindCameraHeightToShader : MonoBehaviour + { + public float layerHeight = 5; + private static readonly int PlayerHeight = Shader.PropertyToID("_PlayerHeight"); + private static readonly int LayerHeight = Shader.PropertyToID("_LayerHeight"); + + private float scaleAverage + { + get + { + var t = transform; + var scale = t.localScale; + var average = (scale.x + scale.y + scale.z) / 3; + return average; + } + } + + private void FixedUpdate() + { + Shader.SetGlobalFloat(PlayerHeight, transform.position.y); + Shader.SetGlobalFloat(LayerHeight, layerHeight); + } + + private void OnDrawGizmos() + { + var t = transform; + var average = this.scaleAverage; + + Gizmos.color = Color.yellow; + Gizmos.DrawWireCube( + t.position, + new Vector3(2f, 0.2f, 2f) * average + ); + } + + private void OnDrawGizmosSelected() + { + var t = transform; + var average = this.scaleAverage; + + Gizmos.color = Color.green; + Gizmos.DrawWireCube( + t.position + Vector3.up * (layerHeight / 2), + (new Vector3(2.2f, 0f, 2.2f) * average) + + Vector3.up * layerHeight + ); + } + } +} -- cgit