Menu
CoddyTech

繰り返し呼び出しと呼び出しのキャンセル

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 22/63。

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) は、最初の呼び出しを0.5秒後に行い、その後キャンセルされるまで0.5秒ごとにBlinkを呼び出します。最初の数値は最初の呼び出しまでの遅延時間、2つ目の数値は呼び出し間の時間です。CancelInvoke(nameof(Blink))で停止し、名前を指定せずにCancelInvoke()を呼び出すと、スクリプトが登録したすべてのInvokeが停止します。

この警告灯は、Spaceキーが押されるまで点滅し、その後は点灯したままになります。

Light lamp;

void Start()
{
    lamp = GetComponent<Light>();
    InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}

void Blink()
{
    lamp.enabled = !lamp.enabled;
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CancelInvoke(nameof(Blink));
        lamp.enabled = true;
    }
}

スポーンの章で使ったタイマーでも、floatフィールドとUpdate()内のチェックを使えば同じことができます。InvokeRepeatingを使うと、Unityが時間を管理して呼び出しを行います。InvokeRepeatingの呼び出しはStart()に記述します。Update()に記述すると、毎フレーム新たな繰り返し呼び出しを登録してしまいます。

challenge icon

チャレンジ

簡単

Geyserは、その上にあるボールを空中に投げ上げます。スクリプトにはball、power、そしてeruptionsのカウントがあります。決まった間隔で噴出するようにしましょう。

  • 最初の噴出はPlayの1秒後に発生し、その後は2秒ごとに発生します。
  • 噴出処理はEruptという名前のメソッドです。このメソッドでは、eruptionsに1を加え、ball.AddForce(Vector3.up * power, ForceMode.Impulse)でボールを上向きに押し上げ、Eruption 1、Eruption 2のようにログを出力します。
  • 3回目の噴出の後、間欠泉は完全に停止します。

Playを押してボールの動きを確認し、それからCheckを押してください。

自分で試してみよう

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // Play の1秒後に噴出し、その後は2秒ごとに噴出する
    }

    // Erupt(): 回数を数え、ball を上に押し上げてログを出力する。3回目の後に停止する
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン