using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class Door : UdonSharpBehaviour { [UdonSynced, FieldChangeCallback(nameof(OpenDoor))] private bool _OpenDoor = false; [SerializeField] private Animator _OpenAnimation; public override void Interact() { Networking.SetOwner(Networking.LocalPlayer, gameObject); if (!OpenDoor) { OpenDoor = true; RequestSerialization(); SendCustomEventDelayedSeconds(nameof(CloseDoorAfterDelay), 1.5f); } base.Interact(); } public void CloseDoorAfterDelay() { OpenDoor = false; RequestSerialization(); } public bool OpenDoor { set { _OpenDoor = value; _OpenAnimation.SetBool("Open", value); } get => _OpenDoor; } }