diff options
Diffstat (limited to 'VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs')
-rw-r--r-- | VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs new file mode 100644 index 00000000..5ba2fb51 --- /dev/null +++ b/VRCSDK3Worlds/Assets/Bakery/examples/scripts/BakeryVolumeReceiver.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +// Example script, a counterpart to BakeryVolumeTrigger.cs (see that script for more info) +// +public class BakeryVolumeReceiver : MonoBehaviour +{ + public bool forceUsage = false; + + // used by triggers + internal int enterCounter = 0; + internal BakeryVolumeTrigger movableTrigger = null; + + Renderer[] renderers; + MaterialPropertyBlock current; + + // Cache renderers affected by volumes + void Awake() + { + if (renderers == null) renderers = GetComponentsInChildren<Renderer>() as Renderer[]; + if (forceUsage) + { + // HDRP can sometimes (?) fail to use globally set volumes when SRP batching is enabled, so disable it for this object. + SetPropertyBlock(new MaterialPropertyBlock()); + } + } + + // Called by triggers + public void SetPropertyBlock(MaterialPropertyBlock mb) + { + if (renderers == null) renderers = GetComponentsInChildren<Renderer>() as Renderer[]; + for(int i=0; i<renderers.Length; i++) + { + renderers[i].SetPropertyBlock(mb); + } + current = mb; + } + + // Update shader properties here if the volume is moving + void LateUpdate() + { + if (movableTrigger == null) return; + + movableTrigger.UpdateBounds(); + SetPropertyBlock(current); + } +} |