Menu
CoddyTech

킬 존

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 19번째.

킬 존은 플레이어가 도달해서는 안 되는 장소 위에 놓인 트리거입니다. 용암, 가시 또는 레벨 아래의 빈 공간이 이에 해당합니다. 플레이어가 킬 존에 들어가면 스폰 지점으로 되돌아갑니다. 여기서는 용암 자체의 스크립트가 이를 처리하며, 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

챌린지

쉬움

플레이어가 다시 생성되도록 하세요. 이 스크립트는 플레이어에 있으므로 other가 아니라 transform과 body를 움직입니다.

  1. Start()에서 Vector3 respawn 필드를 transform.position으로 설정하세요.
  2. OnTriggerEnter(Collider other)에서 other.CompareTag("Checkpoint")일 때 respawn = transform.position;으로 설정하세요.
  3. other.CompareTag("KillZone")일 때 transform.position = respawn;과 body.linearVelocity = Vector3.zero;를 설정하세요.

‘플레이’를 누르고 다리에서 걸어 내려오세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

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: 그 위치로 돌아가 멈춰 섭니다.
}

물리와 게임플레이의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드