기존에 사용하던 유니티에서 Enemy의 AI를 구현하기 위해서는 Behavior tree라는 기법을 사용하곤 했다. GUI를 통해서 이를 편리하게 해주는 에셋도 있지만, 유로라는 단점이 있었다. 하지만, 이번 Unity6 업데이트로 인해서 Behavior tree를 간단히 만들도록 도와주는 Behavior Graph패키지가 출시되었다.
기본적으로 제공되는 기능은 아니다. Package Manager에서 이를 설치해주어야 한다. 우선, 아래의 사진과 같이, Unity Registry에 있는 Behavior 패키지를 다운받는다.
다운이 완료되었으면, 기본적인 환경을 설정하도록 한다. 가장 우선적인 목적은 AI구현이기 때문에, 캐릭터와 지표면, 캐릭터가 쫓을 Target을 만들어준다. 아래의 사진과 같이 간단하게 설정해주었다. 이때, 주의해야 할 점은, 캐릭터에는 Nav mesh Agent, 지표면에는 Nav mesh Serface컴포넌트가 반드시 추가되어 있어야한다. 만약 이 컴포넌트들이 하나라고 추가되어 있지 않다면, 움직이지 않을 것이다.
그리고, Project창에서 우클릭으로 Behavior → Behavior Graph를 생성하고, 이를 캐릭터에 추가한다. 그러면 아래의 사진과 같이, Behavior Agent라는 컴포넌트가 추가되는 것을 확인할 수 있다.
위의 이미지는 Behavior Graph를 통해서 만든 간단한 AI이다. 캐릭터(Self)가 Target의 위치를 따라가고, 그 위치에 도달하면, 콘솔 창에 Attack이라는 로그가 2초 간격으로 출력된다. 현재 Sequence하위의 노드들은 왼쪽부터 오른쪽으로 순차적으로 진행되는데, 노드들의 위치를 바꾸면 결과물도 바뀌게 된다.
위 사진과 같이 캐릭터의 애니메이션을 간단한 Blend Tree로 구성했다. 이를 바탕으로 하는 Behavior Graph 노드를 생성할 때의 주의할 점은, Animation Speed Param의 이름을 영향을 받는 파라미터의 이름과 동일하게 설정해 주어야 한다는 점이다. 나의 경우에는 Speed로 설정해 주었다. Inspector의 추가적인 값들은 Speed는 캐릭터가 이동하는 속도, Distance Threshold는 멈추는 거리, Slow Down Distance는 속도가 감소하는 거리이다.
이를 실행하면, 캐릭터가 상자의 위치를 따라서 이동하는 것을 볼 수 있다. 상자의 위치에 다다르면 정지하지만, 마우스를 통해 상자의 위치를 바꿔주면 다시 이동하는 것을 볼 수 있다.