using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; using VRC.Udon.Common; public enum LightningRoundEffect { Thunder, LightningStrike, ThunderAndRain, MAX_EFFECTS } [UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] public class LightningRoundEffectsController : UdonSharpBehaviour { [SerializeField] private AudioManager _AudioManager; [SerializeField] private Animator _Animator; [SerializeField] private GameObject _LightningBolt; [UdonSynced] private LightningRoundEffect _Effect = LightningRoundEffect.Thunder; public override void OnDeserialization(DeserializationResult Result) { _PlayLightningRoundAnimation_Synced(); base.OnDeserialization(Result); } public void PlayLightningRoundAnimation() { //_Effect = (LightningRoundEffect)Random.Range(0, (int)LightningRoundEffect.MAX_EFFECTS); _Effect = LightningRoundEffect.Thunder; _PlayLightningRoundAnimation_Synced(); RequestSerialization(); } private void _PlayLightningRoundAnimation_Synced() { switch (_Effect) { case LightningRoundEffect.Thunder: _LightningBolt.SetActive(false); _AudioManager.PlaySFX(SFXEventType.Thunder); break; case LightningRoundEffect.LightningStrike: _LightningBolt.SetActive(true); _AudioManager.PlaySFX(SFXEventType.Thunder); break; case LightningRoundEffect.ThunderAndRain: _LightningBolt.SetActive(false); _AudioManager.PlaySFX(SFXEventType.Thunder); break; } _Animator.SetBool("Lightning", true); SendCustomEventDelayedSeconds(nameof(ResetLightningRoundAnimation), 2.0f); } public void ResetLightningRoundAnimation() { _Animator.SetBool("Lightning", false); } }