呼び出し
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);と書きます。
チャレンジ
簡単プレイヤーが着地した少し後に、足場を崩れるようにします。
OnCollisionEnterで、collision.gameObject.CompareTag("Player")のときに、Invoke(nameof(Fall), delay);を呼び出します。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プレイグラウンド