using UdonSharp; using UnityEngine; using VRC.SDKBase; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class GlassShatter : UdonSharpBehaviour { [SerializeField] private AudioManager _AudioManager; [SerializeField] private Collider[] _Colliders; [UdonSynced, FieldChangeCallback(nameof(Shattered))] private bool _Shattered = false; private bool _Prepared = false; public void PrepareEnter() { _Prepared = true; } public void PrepareExit() { _Prepared = false; } public void ShatterEnter() { if (_Prepared && !Shattered) { Networking.SetOwner(Networking.LocalPlayer, gameObject); Shattered = true; _Shatter_Synced(); RequestSerialization(); } } public void ShatterExit() { Shattered = false; } private void _Shatter_Synced() { if (Shattered) { _AudioManager.PlaySFXAtPitch(SFXEventType.GlassShatter, Random.Range(0.9f, 1.1f)); } } public bool Shattered { set { _Shattered = value; _Shatter_Synced(); } get => _Shattered; } }