diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-03-01 09:36:29 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-03-01 09:36:29 +0800 |
| commit | c2b26c0491886b99f422e830cd9ec1637a4ddc2e (patch) | |
| tree | ec5a2b8aaf2e4568bd7ad59aa812864915bc6bdc /Assets/Scripts/Camera/BindCameraHeightToShader.cs | |
firstmaster
Diffstat (limited to 'Assets/Scripts/Camera/BindCameraHeightToShader.cs')
| -rw-r--r-- | Assets/Scripts/Camera/BindCameraHeightToShader.cs | 53 |
1 files changed, 53 insertions, 0 deletions
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 + ); + } + } +} |
