현재 프로젝트에 적 캐릭터는 한 종류밖에 없다. 프로젝트를 완성하기 위해 적 캐릭터 부분을 확장시켜야 하기 때문에 적 부분을 확장 가능하도록 리팩토링한 뒤, Boss 캐릭터를 만들어보자.
고려해야 되는 부분은 크게 Character 부분과 Controller부분 그 이외에 Animation& BT & BB를 고려하면 된다.
Enemy Character
클래스에서 Enemy들이 공통적으로 수행하는 행위(죽으면 AIController의 IsDead 키값을 true로 변경하는 등)를 작성보스는 일반 적과 달리 전투 능력이 높아야 한다. 이를 위해 다양한 스킬을 구사하도록 할 수 있지만 게임을 현실기반으로 하고있으니, 다양하고 화려한 스킬은 이질감이 들 수 있다. 그러니 플레이어 캐릭터가 행할 수 있는 행위들을 추가하여 보스의 전투능력을 향상 시키자. 일반 적과 플레이어 캐릭터의 차이점은 원거리 공격, parry, dodge가 있다.
일단 이번시간은 근거리 공격을 위주로 구현할 것이니 parry와 dodge를 적절히 실행하도록 해주자.
BT의 service를 사용해 구현
플레이어와 캐릭터가 지정한 거리보다 가까히 있다면 뒤로 dodge를 실행
AI State가 holding일 때 service를 실행하도록 해줌
attack시 너무 가까운 거리에서 공격을 하게되면 콜리전이 겹치면서 캐릭터가 날아가는 문제가 발생해 attack시 가깝게 붙어있다면 dodge를 실행하도록 서비스를 붙여줌
TryParry()
를 호출하면, IsParry = true
가 되고 1초 뒤 다시 false
가 됨IsParry == true
라면 적의 공격에 맏는 막기 애니메이션을 출력CanSeePlayer==true
일 때 TryParry()
를 호출하는 서비스를 실행이전에 일반 적을 구현하면서 strafe를 구현했는데 주변 위치중 random으로 한 위치를 골라 해당 위치로 이동하는 방식을 사용했다. 하지만 이 방법의 아쉬운 점이 내가 설정한 위치들 중 랜덤한 한 위치를 선택하는 방식이 아닌 특정 범위 내의 한 점을 선택할 수 밖에 없다는 것이다. 이를 해결하기 위해 EQS를 사용할 수 있다.
EQS는 환경의 특정 위치들에 질문을 던져 점수를 계산하고 가장 높은 점수를 얻은 위치를 결과로 반환하는 형식이다. 여기서 특정 위치들에 질문을 던질 수 있다는 점이 위의 문제를 해결할 수 있게된다. 심지어 위치들의 개수, 모양, 범위 등등을 다양하게 설정할 수 있다는 점도 장점이다. 또한 구현도 매우쉽다. 아마 프로그래머가 아니라도 쉽게 구현 가능할 것 같다.