簡易カウントダウンタイマ
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using UnityEngine.UI;
public class CountDownTimer : UdonSharpBehaviour
{
[UdonSynced]
bool TimerActive; //タイマ有効フラグ
[SerializeField]
int TimerMinitesVal; //タイマ設定値(分単位)
[UdonSynced]
int Timer_Minites; //分の表示用変数
[UdonSynced]
int Timer_Seconds; //秒の表示用変数
[SerializeField]
Text TimerText; //カウントダウンを表示するuGUI Text
System.DateTime startTime; //カウントスタートした日時
System.TimeSpan countTimeSpan; //設定値を適用するTimeSpan
void Start()
{
countTimeSpan = new System.TimeSpan(0, TimerMinitesVal, 0);
}
//Button等でTimerStartを叩く
public void TimerStart()
{
if (Networking.IsOwner(Networking.LocalPlayer, this.gameObject))
{
if(!TimerActive)
{
SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, nameof(SetStartTime));
TimerActive = true;
}
}
}
//開始時刻を保持
public void SetStartTime()
{
startTime = System.DateTime.Now;
}
public void TimerFinish()
{
TimerActive = false;
}
//Update内で開始時刻と現在時刻の差をTimeSpanとして計算し、
//設定分数を適用したTimeSpanとの差からカウントダウン分数と秒数を得る
private void Update()
{
if(TimerActive)
{
if(Networking.IsOwner(Networking.LocalPlayer, this.gameObject))
{
var timeSpanFromStart = System.DateTime.Now - startTime;
var DifTimeSpan = countTimeSpan - timeSpanFromStart;
Timer_Minites = DifTimeSpan.Minutes;
Timer_Seconds = DifTimeSpan.Seconds;
TimerText.text = string.Format("{0:0} : {1:00}", Timer_Minites, Timer_Seconds);
RequestSerialization();
if (DifTimeSpan.TotalSeconds < 0)
{
TimerFinish();
}
}
}
}
public override void OnDeserialization()
{
if(TimerActive)
{
TimerText.text = string.Format("{0:0} : {1:00}", Timer_Minites, Timer_Seconds);
}
}
}
この記事が気に入ったらサポートをしてみませんか?