Menu
CoddyTech

呼び出し

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

Invoke("Explode", 3f)は、3秒後にスクリプト自身のメソッドExplodeを1回呼び出し、その後のコードはすぐに続行されます。Unityは文字列として指定された名前でメソッドを探します。このメソッドはパラメーターを取りません。この爆弾は、ゲーム開始から3秒後に爆発します:

void Start()
{
    Invoke("Explode", 3f);
}

void Explode()
{
    Debug.Log("Boom");
    Destroy(gameObject);
}

名前は文字列なので、コンパイラーはそれを検証できません。Invoke("Explod", 3f)はコンパイルできますが、3秒後に爆発する代わりに、UnityはTrying to Invoke method: Bomb.Explod couldn't be called.とログに出力します。C#のnameofを使えばこれを防げます:nameof(Explode)は"Explode"という文字列で、コンパイラーが検証した名前から生成されるため、中の名前に誤字があると、ゲームの実行前にコンパイルエラーとして検出されます。Invoke(nameof(Explode), 3f);と書きます。

challenge icon

チャレンジ

簡単

プレイヤーが着地した少し後に、足場を崩れるようにします。

  1. OnCollisionEnterで、collision.gameObject.CompareTag("Player")のときに、Invoke(nameof(Fall), delay);を呼び出します。
  2. void Fall()を追加します。body.isKinematic = false;を設定し、Crumble!をログに記録します。

「プレイ」を押して足場に乗ると、1秒後に足場が落下します。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Crumble : MonoBehaviour
{
    public float delay = 1f;
    Rigidbody body;

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void OnCollisionEnter(Collision collision)
    {
        // プレイヤーが着地したら、delay 秒後にプラットフォームを落下させる
    }

    // Fall(): プラットフォームの物理演算を有効にし、Crumble! をログに出力する
}

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

自分で練習してみよう: Unityプレイグラウンド