Menu
CoddyTech

플레이어 추적하기

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

플레이어를 쫓는 적에게는 Rigidbody가 필요합니다. 그래야 벽이 적을 막고, 적이 밀거나 밀릴 수 있습니다. 추적 동작은 물리 스텝마다 한 번 설정하는 플레이어 방향의 속도입니다. 이 좀비는 player 슬롯에 있는 대상에게 다가갑니다.

[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;

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

void FixedUpdate()
{
    Vector3 toPlayer = player.position - rb.position;
    toPlayer.y = 0f;
    Vector3 dir = toPlayer.normalized;
    rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}

player.position - rb.position은 좀비에서 플레이어까지의 방향을 가리킵니다. 플레이어가 더 높거나 낮은 곳에 서 있어도 좀비가 평평한 지면을 걷도록 y를 0으로 설정하고, normalized는 길이를 1로 만들기 때문에 플레이어가 2유닛 떨어져 있든 20유닛 떨어져 있든 좀비는 speed의 속도로 걷습니다. 새 속도는 기존 y 속도를 유지하므로, 좀비가 계단에서 떨어지면 중력이 계속 아래로 끌어당깁니다. Rigidbody에서 Freeze Rotation을 켜 두었으므로 좀비는 걸을 때 넘어지지 않습니다.

속도를 설정하면 즉시 출발하고 방향을 바꾸는 보행자가 됩니다. 구르는 통처럼 무거운 적은 대신 같은 FixedUpdate에서 AddForce로 밀어 움직입니다. 그러면 속도가 붙고, 관성을 유지하며, 플레이어가 옆으로 비키면 지나쳐 갑니다.

Vector3 toPlayer = player.position - rb.position;
toPlayer.y = 0f;
rb.AddForce(toPlayer.normalized * push);

추적자의 Transform을 움직이지 마세요. 그러면 어디든 이동할 수 있는 것처럼 벽 안에도 쉽게 들어가며, 물리 엔진은 그 후에야 추적자를 밖으로 밀어낼 수 있습니다.

challenge icon

챌린지

중급

바위가 플레이어를 따라 구르게 하세요.

  1. FixedUpdate()에서 Vector3 toPlayer = player.position - rb.position;와 toPlayer.y = 0f;를 설정해 밀어내는 힘이 지면을 따라 작용하게 하세요.
  2. rb.AddForce(toPlayer.normalized * force);를 호출하면 가까이 있든 멀리 있든 같은 힘으로 밀어냅니다. 회전은 자유롭게 두어 마찰로 굴러가게 하세요.

‘플레이’를 누르고 바위 주위를 빙빙 돌아보세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Boulder : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private float force = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // 바위를 지면을 따라 플레이어 쪽으로 밀기
    }
}

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

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