キルゾーン
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に設定すると、停止した状態で到着します。タグのチェックにより、溶岩に落ちたそれ以外のものはその場に残ります。
チャレンジ
簡単プレイヤーは矢印キーで力を加えられながら、虚空に架かる狭い橋を渡ります。この部分はすでに書かれています。下の空間には 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: その場所に戻り、静止する。
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。