Menu
CoddyTech

呼び出し

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);と記述しましょう。

challenge icon

チャレンジ

簡単

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! をログに出力する
}
quiz icon腕試し

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

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