오늘은 어제에 이어 Behavior Tree(이하 BT)를 계속 작업했다. 어제한 것들에서 조금 바뀐 부분들도 있고, 만들긴 했지만 쓰지 않을 것 같은 부분들도 있었다.
어제와 달라진 점은 Attack에서 근접과 원거리를 구분지어 AttackType을 결정하려했던 것이 몬스터 종류가 줄어들고 콤보 공격이 생기면서 바뀌게 되었고, 공격에 Delay를 추가해주었다.
또한 오늘 Idle 상태에서 주변을 배회하는 Wandering도 만들었는데, 쓰이지 않을 것 같아 일단은 제외한 상태이다.
SetupBT 새로 작성
BT의 구성이 바뀌면서 노드들도 새로 추가해주었다.
Attack 시퀀스노드에 타입을 결정하는 셀렉터노드를 달아주고, AttackCount 변수를 통해 몇 번째 공격인지를 판단하여 물기와 뜯기 중 어떤 공격을 할 것인지 정한다. 그리고 공격을 한 후 Delay를 가지게 된다.
AttackTarget
몬스터가 첫 공격은 물기, 이후 최대 3번까지 뜯기 공격을 하는 콤보공격을 가지고 있다. 처음에 bool로 condition을 판단하여 AttackType을 정할 수 있게 해보려다가 상당히 잘 풀리지 않았고, 처음부터 다시 만들면서 attackCount로 판별하는 것을 한번 생각해보았다. AttackTarget 부분에서 entityBlackboard에 들어있는 attackCount에 접근해 카운트에 따라 첫 공격이라면 물기 공격(Bite), 이후 3번까지는 뜯기 공격(Tear)을 하도록 만들고 싶었다. 이후 공격 범위에서 벗어난다면 카운트를 다시 0으로 만들어주어야 하는데 아직은 완성되지 않은 상태이다.
Chase 시퀀스노드는 이전과 같고, Idle 시퀀스노드에 위 코드에는 주석으로 처리되어있는 부분이 오늘 만들었다가 제외하게 된 부분이다.
Wandering
일정 범위 안 랜덤한 포지션을 찾아 이동하고, Delay를 가지는 것을 반복하여 일대를 배회하는 것을 생각했었는데 Idle 상태에서 몬스터들이 정지해있도록 하기 위해 제외되었다.
오늘은 그렇게 많이 개발한 것이 없는 것 같아 조금은 아쉬운 날인데, 그래도 이전에 활용을 잘 못했던 Blackboard를 조금은 더 많이 써보게 되었다. 외부에서 필요한 변수들을 그냥 Blackboard에 딕셔너리와 비슷하게 Key값과 Value값을 올려두고, 필요할 때마다 꺼내쓸 수 있어 장점이 있는 것 같다. 팀원에게서 한가지 들은 단점은 어떤 형태의 값이 들어있는지 알기가 어렵다는 것이었다. 장단점이 있는 것 같은데, 단점을 신경쓰면서 커버하여 최소화하고 장점을 잘 활용하여서 쓰면 좋을 것 같다.