Menu
CoddyTech

キルゾーン

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

キルゾーンとは、プレイヤーが到達してはいけない場所(溶岩、トゲ、レベル下の空間など)に設置するトリガーです。そこに入ると、プレイヤーはスポーン地点に戻されます。ここでは溶岩自身のスクリプトで処理し、Inspectorで設定したスポーン地点をTransformフィールドに指定します:

public Transform spawnPoint;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        other.transform.position = spawnPoint.position;
        other.attachedRigidbody.linearVelocity = Vector3.zero;
    }
}

other.attachedRigidbodyは、侵入したコライダーが属するRigidbodyです。transform.positionを設定するとプレイヤーがテレポートします。リスポーンにはこれが必要です。ただし、Rigidbodyはジャンプ中の速度を維持します。たとえば、秒速10ユニットで落下したプレイヤーは、スポーン地点に到着しても秒速10ユニットで落下し続け、溶岩に走り込んだプレイヤーはそのまま走り続け、まっすぐ戻ってきます。linearVelocityをVector3.zeroに設定すると、停止した状態で到着します。タグのチェックにより、溶岩に落ちたそれ以外のものはその場に残ります。

challenge icon

チャレンジ

簡単

プレイヤーは矢印キーで力を加えられながら、虚空に架かる狭い橋を渡ります。この部分はすでに書かれています。下の空間には KillZone タグが付いたトリガーがあり、橋の途中には Checkpoint タグが付いた旗もトリガーとして設置されています。プレイヤーのスクリプトにリスポーン機能を追加しましょう。

  • ゲーム開始時、プレイヤーが立っている場所をリスポーン地点にします。
  • Checkpoint に触れると、その時点でのプレイヤーの位置を新しいリスポーン地点にします。
  • KillZone に入ると、プレイヤーをリスポーン地点に戻し、その場で停止させます。

Play を押して橋から落ちてから、Check を押しましょう。

自分で試してみよう

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: プレイヤーが戻ってくる場所

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

    void Update()
    {
        input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate()
    {
        body.AddForce(input * force);
    }

    // Checkpoint: プレイヤーの現在位置を記憶する。KillZone: その場所に戻り、静止する。
}
quiz icon腕試し

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

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