using Newtonsoft.Json.Linq; using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon.Common; [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class Door : UdonSharpBehaviour { [UdonSynced] private bool _OpenDoor = false; [SerializeField] private Animator _OpenAnimation; [SerializeField] private bool _AutoCloseDoor; public override void OnDeserialization(DeserializationResult Result) { _OpenDoor_Synced(); base.OnDeserialization(Result); } public override void Interact() { Networking.SetOwner(Networking.LocalPlayer, gameObject); if (!_OpenDoor) { _OpenDoor = true; _OpenDoor_Synced(); RequestSerialization(); if (_AutoCloseDoor) { SendCustomEventDelayedSeconds(nameof(CloseDoor), 1.5f); } } else if (!_AutoCloseDoor) { CloseDoor(); } base.Interact(); } private void _OpenDoor_Synced() { _OpenAnimation.SetBool("Open", _OpenDoor); } public void CloseDoor() { Networking.SetOwner(Networking.LocalPlayer, gameObject); _OpenDoor = false; _OpenDoor_Synced(); RequestSerialization(); } }