Unity/기능 구현 / / 2025. 11. 29. 22:47

[Unity] Monster 설정

반응형

 

몬스터는 기본적으로 직접 씬에 배치하는 방향으로 작업하지 않는다.

 

Spawner라는 객체를 만들어 몬스터를 일정 주기마다 스폰시키는 방식을 사용한다.

 

유니티 에디터에서 스크립트를 생성하고,

 

다음과 같은 멤버를 생성한다.

public으로 설정하여 추후 에디터에서 수정할 수 있도록 세팅한다.

여기서 GameObject를 통해서 몬스터를 지정하고,

Player의 위치를 가져와서 플레이어의 현재 위치를 기준으로 일정 거리에서 원형으로 몬스터가 하나씩 스폰되도록 만들 것이다.

 

함수는 다음과 같다.

 

먼저 몬스터를 스폰한다. 스폰할 랜덤한 위치값을 구하기 위해 Random 함수를 사용한다.

랜덤 값의 범위는 0도부터 360도이다. PI는 호도법으로 180도이다.

여기서 구해낸 각도를 x는 cos, y는 sin 함수를 통해 구해낸다. (x, y) = (cos, sin)으로 정규화할 수 있다. 

여기서 radius를 곱하면 플레이어를 기준으로 반지름만큼 떨어진 거리에서 0도부터 360도 사이의 랜덤한 위치에서 스폰된다.

 

위치 값을 가져와서 Instantiate를 사용해 몬스터를 동적으로 스폰한다.

 

 

다음으로 MonsterMovement를 만든다.

몬스터의 이동을 처리할건데 몬스터의 이동을 처리할 때 고려할 사항이 있다.

충돌 문제.

 

몬스터와 캐릭터가 충돌체가 존재하는 상태에서 충돌 중인데 계속 이동을 하면 떨리는 현상이 발생한다.

 

이 문제를 해결하기 위해 프레임 주기가 일정한 FixedUpdate와 강체를 기준으로하는 이동처리를 한다.

에디터에서 먼저 몬스터에 컴포넌트 2개를 추가한다.

 

캡슐 컴포넌트로 충돌체를 생성하고, 리지드 바디로 물리를 켠다.

이 때, 리지드 바디의 회전은 끈다.

 

이제 에디터에서 MonsterMovement 스크립트를 추가하고 몬스터에 컴포넌트로 추가한다.

 

몬스터의 기본 멤버들

 

 

Start 함수에서 리지드 바디와 애니메이터를 가져온다. 

 

 

Spawner 스크립트에서 나 자신(몬스터)을 스폰할 때 Initialize 함수를 호출시키게 한다.

스포너는 Player의 존재를 알고 있고, 몬스터도 플레이어의 존재를 알고 싶기 때문. 그래야 플레이어를 추적하니까.

 

Spawner에서 해당 함수 호출

 

 

다음으로 플레이어를 추적하는 함수를 만든다.

벡터의 뺄셈을 통해 플레이어로 향하는 방향을 구하고, y축 값은 제거한 상태로 정규화하여 반환한다.

그래야 정확한 방향으로 몬스터가 플레이어를 바라보게 회전시킬 수 있다.

 

쿼터니온(사원수)를 통해 회전값을 구하고, 이를 객체의 회전값에 적용시킨다.

Lerp로 부드럽게 전환시킬지, 한방에 전환시킬지는 매개변수를 통해 설정

 

 

(선택사항)

다음으로 코루틴을 통해 처음 스폰될 때, 서서히 몬스터가 생성되는 것처럼 보이는 방법으로 크기를 0에서 1로 서서히 키우는 작업을 수행한다.

 

 

마지막으로 FixedUpdate를 통해 플레이어를 향해 추적을 시작하는 로직을 작성한다.

스케일이 1이 되기 전까지는 움직이지 않다가, 그 이후부터 추적을 시작한다.

이때, 이동 로직을 리지드바디를 사용해 충돌시 떨리는 문제를 해결한다.

 

 

이제 에디터로 넘어가서 하이어라키에 게임 오브젝트로를 생성하고 스크립트를 컴포넌트로 추가한다.

스폰할 몬스터 프리팹과 플레이어를 지정

 

몬스터는 반드시 Monster Movement 스크립트를 컴포넌트로 가지고 있어야 한다.

 

 

반응형

'Unity > 기능 구현' 카테고리의 다른 글

[Unity] Follow Camera  (1) 2026.01.06
[Unity] Input System으로 이동  (0) 2025.12.09
[Unity] Playerprefs  (0) 2025.12.01
[Unity] 캐릭터 초기 설정  (0) 2025.11.28
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유