私はカウントダウンタイマーを使用する複数のクラスを持っていますが、複数のタイマーを使用すると、出力は同じ値を返します。Unity:複数のタイマーの使用C#
1つのタイマーを使用すると、問題なく完全に動作します。文字通り、タイマーを別々のタイマーに分割するだけです。
ここでは簡単なことを忘れてしまいましたが、同じ出力を返す理由を理解できません。
編集:明快 - mfCurrentTime
とmfTimeTravelling
同じ値を返す、と彼らは各タイマから異なる値を返す必要がありますが、一つだけのタイマーがあるかのように、彼らは一緒にマージしています。
彼らは、彼らはそれが1つのタイマーであれば
編集2として行動している2つの別々のタイマーのように行動していません。個別に使用する場合、両方のタイマーは異なる値を返す、彼らは帰国しなければならない正しい値。両方のタイマーが問題が発生するのと同時に実行されている場合のみです。例えば
:
mfCurrentTime
常に継続的にカウントダウン更新が
mfTimeTravelling
がbool _mbIsTravelling
がtrueの場合、時間が経過返す呼び出していることとして、経過、現在の時刻を返します。
両方のクラスがアクティブであるときに、mfCurrentTime
が正しいこと、およびbool
が他のクラスのmbIsTravelling
ためtrue
である場合、それはmfCurrentTime
の時間を要します。問題は、1つのタイマーではなく2つの完全に別々のタイマーでなければならないということです。
編集3: @ Abion47の助けがあれば、すべてがうまくいくとの発見につながりました。私は更新メソッドのフラグを含まないだけでした。実際のエラーが私のために大規模な監視だったとき、私はCountdownを問題と呼んでいたやり方で、私はとても固定されていました。私は更新プログラムに条件を追加し、すべてが問題ありません。
if(_mbIsTravelling)
{
mIsTravellinTimer.Update();
}
-
このクラスは、カウントダウンタイマーを使用しています。
このクラスでは、カウントダウンタイマーも使用しています。
public class Level_DistanceTravelled : MonoBehaviour
{
public EndOfLevelElement UIElement;
[HideInInspector]
public float mfTimeTravelling;
[HideInInspector]
public string msDistanceTravelled;
private bool _mbIsTravelling;
private Countdown mIsTravellinTimer = new Countdown(6000.0f);
void Start()
{
mIsTravellinTimer.Reset();
}
void Update()
{
mIsTravellinTimer.Update();
DistanceTravelling();
UIElement.GetDistanceTravelled(msDistanceTravelled);
}
private void DistanceTravelling()
{
if (GMM.Instance.Input.ShouldLHorizontalKeyLeft() || GMM.Instance.Input.ShouldLHorizontalKeyRight() || GMM.Instance.Input.ShouldLHorizontalAxis() != 0.0f)
{
_mbIsTravelling = true;
}
else
{
_mbIsTravelling = false;
}
if (_mbIsTravelling)
{
// add math for working out distance so the string displays meters spooled
mfTimeTravelling = mIsTravellinTimer.GetTimeElapsed();
msDistanceTravelled = mfTimeTravelling.ToString("#.00");
}
}
}
とカウントダウンクラス、(タイマーなどを処理するための汎用的なクラス)ここ
public class Countdown
{
private float _mfCountdownTime;
private float _mfCurrentTime;
public Countdown(float lfCountdownTime)
{
_mfCountdownTime = lfCountdownTime;
_mfCurrentTime = 0f;
}
public void Update()
{
Update(Time.deltaTime);
}
public void Update(float lfTimeStep)
{
_mfCurrentTime += lfTimeStep;
if (_mfCurrentTime > _mfCountdownTime)
{
_mfCurrentTime = _mfCountdownTime;
}
}
public bool IsComplete()
{
return _mfCurrentTime >= _mfCountdownTime;
}
public void SetComplete()
{
_mfCurrentTime = _mfCountdownTime;
}
public void Reset()
{
_mfCurrentTime = 0f;
}
public float GetTimeElapsed()
{
return _mfCurrentTime;
}
public float GetTimeRemaining()
{
return _mfCountdownTime - _mfCurrentTime;
}
public float GetProgress()
{
return Mathf.Clamp01(_mfCurrentTime/_mfCountdownTime);
}
}
あるスクリプトの両方で
あなたはどんな「価値」を参照していますか?現在の価値は何ですか?タイマーが正しい値を戻していないと言ったときに、何を意味するのかはまったく分かりません。コードが何をしたいのか現在何をしているのかを明記してください。 – Abion47
@ Abion47私はいくつかの明確さで投稿を更新しました。ありがとう – Christo
@ Albion47彼らは2つの別々のタイマーのように動作していない、彼らは1つのタイマーのように動作しています – Christo