공격하는 Enemy AI의 수를 제한해보자
Enemy AI 를 만들었는데 Enemy가 10명이면
거리조건이 충족되는 모든 Enemy들이 나에게 달려들어서 공격을 하기 시작한다
근데 한 번에 10명이 달라붙어서 공격하면 나는 그냥 도망가거나 당하고 있는 수밖에 없다 ㅠㅠ
그래서 나를 공격하는 적의 수를 제한해보았다
Instance Synced란
언리얼 엔진 문서에 따르면 값을 동기화시키는 것을 말하는데
이 기능을 사용해보았다
Instance Synced는 같은 블랙보드를 사용하는 AI끼리 값을 공유하는 것을 말한다
언제 주로 사용하냐면
FPS게임에서 적 하나가 나를 발견했다고 가정한다
그리고 해당하는 적이 포함된 팀에게 나의 위치를 알려주고 곳곳에 퍼져있던 적 팀들이 나를 공격하게 만들고 싶을 때
이 Instance Synced를 True로 설정한 AI들이 나의 위치를 공유하는 것이다
현재 해당 기능을 사용하지 않은 상태에서는
이처럼 플레이어를 인식한 적이 모두 공격을 시작한다
구현중에 어려웠던 점은
플레이어를 인식한 적 중에서 공격중인 적을 추출해내야하는 것.
공격 중이었던 적이 플레이어와 멀어지면서 공격을 멈추고 patrol상태로 돌아가거나
적이 나의 공격에 맞아서 hitted상태가 되었다가 다시 공격으로 돌아올 때에
현재 나를 공격하는 적의 수를 어떻게 카운트 하느냐 였다
일단 Behavior Tree - Service에서 MaxAttack이라는 변수를 두고
MaxAttack보다 블랙보드에 있는 int형 'Attacking' 변수의 값이 더 커지면 대기상태로 들어가도록 설정했다
그리고 공격하는 적, 공격 상태에서 다른 상태로 전환한 적의 수를 관리하기 위해서
모든 AI의 상태를 관리고하고 있는 AIBehaviorComponent에서 수를 세어주었다
Service에서 모든것을 다 관리하고 싶었지만
이렇게 서비스를 벗어난 곳에서 Hitted 와 Parrying 상태를 관리하기에
상태 변화를 감지하기가 어려운 점이 있었다
결과
결과로는 플레이어를 인식한 6명의 적 중에 내가 설정한 2명의 적만 공격, 나머지는 대기하게 된다
'> Project > Unreal4 C++' 카테고리의 다른 글
[Unreal C++] AI EQS - Strafing (0) | 2024.02.26 |
---|---|
[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 |