카테고리 없음

[Unity/C#] Boss Behavior Tree 제작

Joon_Im 2025. 4. 22. 20:32

오늘은 보스몬스터의 Behavior Tree를 제작해보았다.

첫 날이라 트리의 노드를 생성해서 붙여주고, 각 조건에서 트리를 잘 타고 들어가고 나오는지 테스트해보면서 제작하였다.

(일단 보이는 것들을 위해 만든 것들이 많아서 내용이 지저분하니 팀원들 양해바랍니다.)

 

▲ BossEnemy Behavior Tree

 

우리 프로젝트의 보스는 무방비 영역, 집중공격 영역, 견제 영역의 세 영역을 가지고 있고 영역에 따라 하는 공격이 다르다.

공격의 종류에는 색(索), 축(逐), 무(舞), 비기 : 해(海) 4가지가 존재한다.

각각 다른 쿨타임과 특성들이 존재하고 공격 속도 또한 다르다.

 

 

▲ 보스 영역 임시 표시

 

 

먼저 보스의 영역을 보기 쉽게 하기 위해 보스에 임시로 Sprite와 따라다니는 텍스트를 달아주어 현재 어느 영역에 있는지 확인하기 쉽게 해주었다. 또한 내부적으로는 플레이어가 각 영역에 들어갔을 때 다른 숫자를 반환하도록 하여 어느 영역에 플레이어가 있는지 확인할 수 있게 해주었다.

 

 

▲ 아직은 아무것도 없는 비기 : 해(海) 공격

 

Behavior Tree는 가장 왼쪽부터 오른쪽으로 검사한다.

보스의 체력이 낮아지게 되면(10% 이하) 가장 먼저 해야하는 비기 : 해(海) 공격을 CrisisAttack이라 이름 붙여 트리 가장 왼쪽에 달아주었다. 현재는 Debug.Log를 통해 확인할 수 있다.

 

 

▲ 축(逐) 공격

다음은 플레이어가 보스의 집중공격 영역에 있을 때이고  축(逐), 무(舞) 공격을 할 수 있는데, 이를 각각 ExpelAttack, CharmingAttack으로 이름 붙여주었다.

축(逐) 공격은 플레이어가 집중공격 영역에 처음 발을 들인 순간 즉시 발동 되고 5개의 주황색의 광선을 발사하는데, 현재 광선의 개수는 아직 건드리지 않아서 앞으로 나올 공격들도 일단은 광선 하나만 발사한다. 또한 30초의 쿨타임을 가진다.

 

 

▲ 무(舞) 공격

 

 

무(舞) 공격은 플레이어가 집중공격 영역에서 10초 이상 지났을 때 활성화가 되고 나가면 비활성화 되는데, 플레이어가 방향키 입력을 하지 않았을 때 노란색 광선을 발사한다. 참고로 무(舞)는 상대를 춤추게 만든다는 의미라고 한다.

 

 

▲ 색(索) 공격

 

색(索) 공격은 플레이어가 견제 영역에 있을 때 공격으로 1회 공격 후 15초의 쿨타임이 있다. 색출한다라는 의미로, 보스가 다른 적들에게 플레이어 위치를 알 수 있게 해주는 빨간색 광선을 발사한다. 광선이 플레이어에게 적중하면 맵 상에 있는 모든 적들이 플레이어 위치를 알게 되고 공격을 위해 접근하게 된다.

 

 

▲ 플레이어의 공격 범위 안까지 가까워지면 보스는 거리를 벌린다.

 

MoveBack이란 노드는 보스가 플레이어의 공격 범위 안까지 가까워졌을 때 거리를 벌리기 위해 뒤로 이동하도록 하기 위한 것이다. 벗어난 이후에도 3초 동안 같은 방향으로 이동을 지속한다.

 

 

일단 오늘은 여기까지 만들어보았는데, 앞으로 더 구현하면서도 코드를 내부적으로 정리를 많이 하여 더 알아보기 쉽고 깔끔하게 할 수 있다면 좋을 것 같다.