Strafing이란?
https://www.youtube.com/watch?v=opTRLl9yU8g
위 영상을 보면 strafing이 잘 나타나있다
적 AI가 공격을 하지 않고 대기중일 때 가만히 서서 대기하는 것이 아니라
일정 조건에 따라서 옆걸음질을 하며 대기하는 것이다
여기서 옆걸음질을 Strafing이라고 한다
이 영상을 보면 enemy가 공격을 하고 잠시 대기상태에 있을 때 가만히 서있기만 한다
그게 되게 어색하게 느껴지기 떄문에 Strafing을 구현해보았다
처음에는 먼저 어떤 조건에 따라 Strafe를 진행해야할지 감이 안잡혀서
Strafing을 구현 완료한 유튜브를 많이 봤다
AI가 일정 거리에서 타겟을 인식하면 다가와서 근처에서 Strafing을 하다가
AI가 타겟의 뒤쪽으로 가게 되면 공격하는 방식이 있었고
FPS게임 같이 원거리 공격에서는 가만히 서서 공격하다가 Damage를 입었을 경우에 Strafing을 하는 방식도 있었다
내가 하고 있던 프로젝트에는 어떤 조건이 어울릴까 생각을 하다가
Approach상태일 때 ActionRange까지 다가간 뒤 공격하는 것이 아니라
Approach상태일 때 Strafing하며 주위를 돌다가 타겟이 Action Range까지 가까이 오면 공격하는 방식을 선택했다
그렇다면 이제 Strafing을 어떻게 구현할까?
먼저 AI가 옆걸음하는 애니메이션을 만들어야했다
현재 AI는 8방향으로 걷고 뛰는 Blendspace를 사용하여 움직이는데,
이 Blendspace를 그대로 사용한다면, 옆걸음질을 사용하여 해당 위치로 이동하는게 아니라
그 위치로 이동하기 위해 몸을 돌려서 앞으로 걸어갈 것이기 때문이다
근데 내가 원하는건 타겟이 잡힌 상태에서는 옆으로 걸어야하므로 IsFocusing이라는 Bool 변수를 하나 주고
이 변수의 참/거짓에 따라 Blendspace를 바꿔주는 방법을 택했다.
그 후에 Strafing하며 이동할 위치를 구해줘야했다
위치를 어떻게 구할까 하다가
EQS를 이용해보기로 했다
EQS를 이용해서 플레이어(타겟)을 중심으로 원을 그리고
적과 가장 가까운 지점으로 이동하도록 설정해주었다
그리고 Filter로 적과 거리가 100 이하인곳은 제자리 그대로라는 뜻이므로 제외해주고
Strafing하며 이동할 때 타겟을 가로질러서 너무 먼 곳으로 이동하지 못하도록
최대 거리도 제한해주었다
그리고 Behavior Tree에서
EQS쿼리를 실행시켜주었다
결과
이렇게 구현을 완료했다
'> Project > Unreal4 C++' 카테고리의 다른 글
[Unreal4 C++] 공격하는 Enemy AI의 수 제한 (0) | 2024.01.27 |
---|---|
[Unreal4 C++] 베지에 곡선을 활용한 Boss_Skill (0) | 2023.11.01 |
[Unreal4 C++] 04 강참조/약참조 (0) | 2023.09.12 |
[Unreal4 C++] 03 (0) | 2023.08.17 |
[Unreal4 C++] 02 Weapon Attachment, BackRoll (0) | 2023.07.18 |