タイマーの表示(時間の同期。マスタークライアントが管理する)


時間の表示と同期
using UnityEngine;
// ★追加
using TMPro;
using Photon.Pun;
using ExitGames.Client.Photon;
public class TimeManager : MonoBehaviourPunCallbacks
{
public TextMeshProUGUI timeLabel;
public float initialTime = 100f;
private float remainingTime;
void Start()
{
remainingTime = initialTime;
// マスタークライアントが初期時間をセット
if (PhotonNetwork.IsMasterClient)
{
UpdateRoomTimeProrerty(initialTime);
}
}
void Update()
{
// マスタークライアントだけが時間を減らす計算を行う
if (PhotonNetwork.IsMasterClient)
{
remainingTime -= Time.deltaTime;
// マスタークライアントがサーバーに書き込む
UpdateRoomTimeProrerty(remainingTime);
}
}
// 誰かが入室した時や、プロパティが更新された時にUIを書き換える
public override void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)
{
base.OnRoomPropertiesUpdate(propertiesThatChanged);
if (propertiesThatChanged.ContainsKey("RemainingTime"))
{
// 保存されているタイムの読み込み
float networkTime = (float)propertiesThatChanged["RemainingTime"];
// 読み込んだタイムをUIで表示
DisplayTime(networkTime);
}
}
// マスターサーバーに時間を書き込む
void UpdateRoomTimeProrerty(float time)
{
Hashtable props = new Hashtable { { "RemainingTime", time } };
PhotonNetwork.CurrentRoom.SetCustomProperties(props);
}
// 秒数を「0:00」の形式に変換して表示
void DisplayTime(float timeToDisplay)
{
// 小数点以下の切り捨て
int minutes = Mathf.FloorToInt(timeToDisplay / 60);
int seconds = Mathf.FloorToInt(timeToDisplay % 60);
// {0:0}と{1:00}の先頭の数字はインデックス番号。何番目の変数を代入するかを指定
timeLabel.text = string.Format("Time {0:0}:{1:00}", minutes, seconds);
}
}


【Unity6版】BattleOnline(全38回)
他のコースを見る

時間の表示と同期
using UnityEngine;
// ★追加
using TMPro;
using Photon.Pun;
using ExitGames.Client.Photon;
public class TimeManager : MonoBehaviourPunCallbacks
{
public TextMeshProUGUI timeLabel;
public float initialTime = 100f;
private float remainingTime;
void Start()
{
remainingTime = initialTime;
// マスタークライアントが初期時間をセット
if (PhotonNetwork.IsMasterClient)
{
UpdateRoomTimeProrerty(initialTime);
}
}
void Update()
{
// マスタークライアントだけが時間を減らす計算を行う
if (PhotonNetwork.IsMasterClient)
{
remainingTime -= Time.deltaTime;
// マスタークライアントがサーバーに書き込む
UpdateRoomTimeProrerty(remainingTime);
}
}
// 誰かが入室した時や、プロパティが更新された時にUIを書き換える
public override void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged)
{
base.OnRoomPropertiesUpdate(propertiesThatChanged);
if (propertiesThatChanged.ContainsKey("RemainingTime"))
{
// 保存されているタイムの読み込み
float networkTime = (float)propertiesThatChanged["RemainingTime"];
// 読み込んだタイムをUIで表示
DisplayTime(networkTime);
}
}
// マスターサーバーに時間を書き込む
void UpdateRoomTimeProrerty(float time)
{
Hashtable props = new Hashtable { { "RemainingTime", time } };
PhotonNetwork.CurrentRoom.SetCustomProperties(props);
}
// 秒数を「0:00」の形式に変換して表示
void DisplayTime(float timeToDisplay)
{
// 小数点以下の切り捨て
int minutes = Mathf.FloorToInt(timeToDisplay / 60);
int seconds = Mathf.FloorToInt(timeToDisplay % 60);
// {0:0}と{1:00}の先頭の数字はインデックス番号。何番目の変数を代入するかを指定
timeLabel.text = string.Format("Time {0:0}:{1:00}", minutes, seconds);
}
}


タイマーの表示(時間の同期。マスタークライアントが管理する)