【趣味】【ゲーム開発】Unity時間管理のひな形2
昨日作ったシーン実行経過時間クラスSceneTimerを使った、タイマーの子機。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// C# システム using System; // Unity システム using UnityEngine; /// <summary> タイマークラス </summary> public class Timer : MonoBehaviour { /// <summary> 初更新時処理 </summary> void Start() { Restart(); } /// <summary> 再開始処理 </summary> public void Restart() { _beginSceneTime = SceneTimer.Elapsed; } /// <summary> 経過時間 </summary> public TimeSpan Elapsed { get { return SceneTimer.Elapsed - _beginSceneTime; } } /// <summary> 開始時シーン時間 </summary> TimeSpan _beginSceneTime; } |
Time.deltaTimeをそれぞれの場所で加算するのは好きじゃない。
TimeSpan型変換処理を挟んでいるので尚更だ。
こうしておけば、SceneTimerが一時停止(経過時間加算中断)すれば、
このクラスのタイマーすべてを一時停止できる。
ただ、この実装はそれぞれのタイマーの一時停止を行いたいとき、
Javaを使った、Androidアプリネイティブ実装でボトルネックになったことがある。
Unityの場合、その時は一時停止したタイマーの_beginSceneTimeに、
Time.deltaTimeを加算すればいいのだが、それだと最初の目的を無視してるので微妙である。
まあ、僕にとってタイマーの一時停止処理がそもそも、例外のような感覚なので、
この実装を用いるならここが妥協点だと思う。
「Unityなんだからアセット使え」はこのブログでは禁句。
「都会なんだから移動はタクシー使え」みたいな発言だ。
好き好んで敢えて自転車使ってるサイクリストみたいなもんだと思ってほしい。