using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; [UdonBehaviourSyncMode(BehaviourSyncMode.None)] public class TriggerToggle : UdonSharpBehaviour { [SerializeField] private Collider _Collider = null; [SerializeField] private GameObject _ToggledObject = null; [Tooltip("When true, object is active when player is inside trigger volume. If false, object is inactive when inside trigger volume.")] [SerializeField] private bool _ActiveOnTrigger = true; [Tooltip("Set number of seconds to delay toggle when entering trigger volume.")] [SerializeField] private float _EnterDelay = 0.0f; [Tooltip("Set number of seconds to delay toggle when exiting trigger volume.")] [SerializeField] private float _ExitDelay = 0.0f; public override void OnPlayerTriggerEnter(VRCPlayerApi Player) { if (Player.isLocal) { if (_EnterDelay > 0.01f) { SendCustomEventDelayedSeconds(nameof(EnableToggledObject), _EnterDelay); } else { EnableToggledObject(); } } base.OnPlayerTriggerEnter(Player); } public void EnableToggledObject() { _ToggledObject.SetActive(_ActiveOnTrigger); } public override void OnPlayerTriggerExit(VRCPlayerApi Player) { if (Player.isLocal) { if (_ExitDelay > 0.01f) { SendCustomEventDelayedSeconds(nameof(DisableToggledObject), _ExitDelay); } else { DisableToggledObject(); } } base.OnPlayerTriggerExit(Player); } public void DisableToggledObject() { _ToggledObject.SetActive(!_ActiveOnTrigger); } }