UnityでUniRxを使い、変数がtrueになっている間の経過時間を取得したく思い、以下コードを記述してみましたが上手く行きませんでした。
C#
1using System; 2using UnityEngine; 3using UniRx; 4using UniRx.Triggers; 5 6public class SampleClass : MonoBehaviour 7{ 8 // 状態 9 private bool IsState { get; set; } = false; 10 11 // 経過時間をここに保存したらできる? 12 TimeSpan totalTimeSpan; 13 14 void Awake() 15 { 16 // IsStateがtrueの間の経過時間を計算しtotalTimeSpanに入れる 17 var inputObservable = gameObject.UpdateAsObservable().Where(_ => IsState); 18 19 // TODO: 以下だとゲーム起動からの時間を計算してしまう 20 Observable.TimeInterval(inputObservable) 21 .Do(x => 22 { 23 totalTimeSpan = totalTimeSpan.Add(x.Interval); 24 Debug.Log($"経過時間:{totalTimeSpan.Seconds}"); 25 }) 26 .Subscribe(); 27 } 28 29 // SampleObjに衝突したらIsStateをtrueに 30 void OnTriggerEnter2D(Collider2D col) 31 { 32 if (col.gameObject.CompareTag("SampleObj")) 33 { 34 IsState = true; 35 } 36 37 } 38} 39コード
Observable.TimeInterval
のDo
引数に前回フレームからの経過時間が入ってくるので、x.Interval
を合計していけば経過時間を取得できると思いました。
しかしこれだと、ゲーム起動からの経過時間がログに出力されます。
IsState = true
になっている間の経過時間を測る方法に詰まってしまいました。
勉強し始めのコード内容で恐縮です。
どなたかお力添え願えますでしょうか。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/09 03:11 編集
2022/03/09 04:04
2022/03/09 07:05
2022/03/09 08:46