0

タイマーが設定された目標に達するたびにトリガーされるタイマー イベントを作成しました。ただし、最初にタイマーをトリガーすると、一定の長さに達してから停止します。ただし、タイマーを再度トリガーすると、意図したとおりに機能し、これがどこで発生しているのかわかりません。

この問題がどこにあるのかを確認するために、誰かが私のタイマー コードを見てくれませんか? 1日探しましたが、特定できません。

以下は、メインクラスでタイマーを使用して何かを行うインスタンスです。わかりやすくするために、一部の内容は省略されています。

public float start_time;
public float look_at_time;
public float end_time;
private bool track_timer = false;

//this is called from a different class but acts as my start method
public void Setup()
{
    start_time      = 0;
    running_time    = 0;    

    ResetTimer();
}

void Update () 
{
    bool updateTimer = (track_timer && lastHitObject != null);
    Check(updateTimer);
            MyMethod();
}

void ResetTimer()
{
    start_time      = 0.0f;
    running_time    = 0f;
    track_timer     = false;
}
void MyMethod()
{
  if(argument 1)
  {
    if(argument 2)
    { 
       track_timer = false;
     }
  }

else 
   track_timer = false;
}

void Check(bool updateTimer)
{
    if(updateTimer)
    {
        start_time      += Time.deltaTime;
        running_time    += Time.deltaTime;
        if ( running_time >= end_time )
        {
            track_timer = false;
        }
    }   
    else
        end_time = Time.time;
}
4

1 に答える 1

0

コードで何をしているのか本当にわかりません。単純化してみてください! 時間の 2 番目の引数を指定してInvokeを使用するか、次のようにすることができます。

class Timer : MonoBehaviour
{
    public float SecondsToWait;

    private float timeCounter;

    void OnEnable() {
        timeCounter = 0;
    }

    void Update() {
        timeCounter += Time.deltaTime;

        if(timeCounter >= SecondsToWait)
        {
            enabled = false; //Disable this object
            doMyMethod();
        }
    }

    private void doMyMethod() {
        Debug.Log("Doing stuff!");
    }
}

停止したい場合は、無効にしてください。実行したい場合は、再度有効にしてください。

于 2013-10-25T12:32:55.507 に答える