呼び出し
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 21/63。
Invoke("Explode", 3f)は、スクリプト自身のメソッドExplodeを今から3秒後に一度呼び出し、その後のコードはすぐに続行されます。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);と記述しましょう。
チャレンジ
簡単2つの足場の間にあるPlatformは崩れる足場です。Rigidbodyはキネマティックなので、空中にとどまっています。そのCrumbleスクリプトを書きましょう。
- プレイヤーが着地したら、
delay秒(Inspectorで1)待ってから落下します。 - 落下処理は
Fallという名前のメソッドです。足場の物理演算を有効にし(isKinematic = false)、Crumble!をログに出力します。 - プレイヤーが触れるまでは、足場はその場にとどまります。
メソッド名にはnameofを使いましょう。Playを押して、矢印キーで足場に乗り、その後Checkを押しましょう。
自分で試してみよう
using UnityEngine;
public class Crumble : MonoBehaviour
{
public float delay = 1f;
Rigidbody body;
void Start()
{
body = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision)
{
// プレイヤーが着地したら、delay 秒後にプラットフォームを落下させる
}
// Fall(): プラットフォームの物理演算を有効にし、Crumble! をログに出力する
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。