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 ); } } }