Files
QuizzinMk5.1/Assets/Quiz/Scripts/Door/Door.cs
2025-12-07 23:15:32 +00:00

83 lines
1.8 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using VRC.Udon.Common.Interfaces;
public class Door : UdonSharpBehaviour
{
[SerializeField] private Animator doorAnimator;
[SerializeField] private AudioSource doorAudioSource;
[UdonSynced] private bool isOpen = false;
[Header("Audio Clips")]
[SerializeField] private AudioClip doorOpenClip;
[SerializeField] private AudioClip doorCloseClip;
[SerializeField] private AudioClip doorLockedClip;
public void Start()
{
int layer = LayerMask.NameToLayer("Walkthrough");
if (Networking.IsOwner(gameObject))
{
gameObject.layer = layer;
// Set layer for all children
Transform[] children = gameObject.GetComponentsInChildren<Transform>();
for (int i = 0; i < children.Length; i++)
{
children[i].gameObject.layer = layer;
}
}
}
private void ToggleOpen()
{
if (Networking.IsOwner(gameObject))
{
isOpen = !isOpen;
doorAnimator.SetBool("isOpen", isOpen);
RequestSerialization();
}
else
{
SendCustomNetworkEvent(NetworkEventTarget.All, nameof(TryLocked));
}
}
public override void OnDeserialization()
{
doorAnimator.SetBool("isOpen", isOpen);
}
public void HandleInteraction()
{
ToggleOpen();
}
public void PlayOpenSound()
{
doorAudioSource.PlayOneShot(doorOpenClip);
}
public void PlayCloseSound()
{
doorAudioSource.PlayOneShot(doorCloseClip);
}
public void PlayLockedSound()
{
doorAudioSource.PlayOneShot(doorLockedClip);
}
public void TryLocked()
{
doorAnimator.SetTrigger("tryLocked");
}
}