51 lines
1007 B
C#
51 lines
1007 B
C#
|
|
using CameraSystem;
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
using VRC.SDK3.UdonNetworkCalling;
|
|
using VRC.SDKBase;
|
|
using VRC.Udon;
|
|
|
|
|
|
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
|
|
public class CameraTimedSwitcher : UdonSharpBehaviour
|
|
{
|
|
[SerializeField] private CameraControllerBase _CameraController;
|
|
[SerializeField] private Camera[] _Cameras;
|
|
|
|
[SerializeField] private float _TimeBetweenCuts = 5.0f;
|
|
|
|
[UdonSynced, FieldChangeCallback(nameof(Activate))] private bool _Active = false;
|
|
|
|
private int _NextCameraIndex = 0;
|
|
|
|
|
|
public void SwitchToNextCamera()
|
|
{
|
|
if (_Active)
|
|
{
|
|
_CameraController.SwitchToLiveCamera(_Cameras[_NextCameraIndex]);
|
|
_NextCameraIndex = (_NextCameraIndex + 1) % _Cameras.Length;
|
|
|
|
SendCustomEventDelayedSeconds(nameof(SwitchToNextCamera), _TimeBetweenCuts);
|
|
}
|
|
}
|
|
|
|
|
|
public bool Activate
|
|
{
|
|
set
|
|
{
|
|
if (_Active != value)
|
|
{
|
|
_Active = value;
|
|
_NextCameraIndex = 0;
|
|
SwitchToNextCamera();
|
|
|
|
RequestSerialization();
|
|
}
|
|
}
|
|
get => _Active;
|
|
}
|
|
}
|