플레이어 추격하기
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 50번째.
플레이어를 쫓는 적에게는 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에서 회전 고정을 켜 두었으므로 좀비는 걸을 때 넘어지지 않습니다.
속도를 설정하면 즉시 출발하고 방향을 바꾸는 적이 만들어집니다. 무거운 적은 대신 같은 FixedUpdate에서 AddForce를 사용해 밀 수 있습니다. 그러면 속도가 점차 붙고, 관성을 유지하며, 플레이어가 옆으로 비키면 지나쳐 갑니다. 추적자의 Transform을 움직이지 마세요. 그러면 다른 곳과 마찬가지로 벽 안에 들어갈 수 있고, 이후 물리 엔진이 적을 밀어내야만 합니다.
챌린지
중급바위가 플레이어를 따라 굴러갑니다. Rigidbody가 있는 공인 바위에 Boulder 스크립트를 작성하세요. Inspector에서 player(Player)와 force(6)를 지정합니다. Player 스크립트는 준비되어 있습니다. 화살표 키로 플레이어를 움직일 수 있습니다.
- 매 물리 업데이트마다 플레이어가 가까이 있든 멀리 있든
AddForce를 사용해force만큼의 힘으로 바위를 플레이어 쪽으로 밀어주세요. - 플레이어가 턱 위에 서 있더라도 위아래 방향 성분 없이 지면을 따라 밀어주세요.
- Transform을 움직이거나 회전을 고정하지 마세요. 마찰로 바위가 굴러갑니다.
Play를 누르고 바위 주위를 빙빙 돈 다음 Check를 누르세요.
직접 해보기
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()
{
// 바위를 지면을 따라 플레이어 쪽으로 밀어줍니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.