62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
|
|
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);
|
|
}
|
|
}
|