[UE5] 7주차 2번. 본격적인 Enemy AI - 1
by pmj6541기본 설계
자 먼저 BP_Enemy 에서 변수 BehaviorTree를 만들어줍니다.
또 Enemy 생성 시 AIController 또한 BehaviorTree로 설정해줍니다.
그리고 이제 원거리 적, 근거리 적 을 구현해야 하므로 Enemy를 추상클래스로 만들어 주고, 상속받아 구현하도록 해줄게요. 새로 만든 클래스에 BT_Enemy_Melee 만들어주고, 작업 해줍니다.
블랙보드도 만들어주고, Target 변수도 오브젝트 타입으로 만들어줍니다. 베이스 클래스는 Character.
자 다음, 만들어줄 것은 서비스. Selector 노드를 만들고 이에 입혀줄 서비스를 만들고, SetTarget 을 수행할 서비스를 만듭니다. TargetKey는 활용하기 편하도록 블랙보드 키 선택 툴 타입으로 만들고, 비해이비어 트리에서 Target으로 지정해줍니다.
트리 전체 구조에서는 블랙보드 조건을 통과할 수 있도록 Selector를 두개 두어 구성합니다. 여기서 두개를 두는 이유는, Blackboard Based Condition의 순서를 SetTarget 다음으로 두기 위함입니다.
AI 기능 시나리오
이쯤에서 AI의 기본 로직 전체를 정리하자면
1. 타겟 인식
2. 무기 / 스킬 준비
3. 공격 가능 범위까지 이동
4. 공격
하지만 발도, 스킬준비 등의 Task가 존재할까요? 아닙니다. 그래서 우린 이걸 만들어 주어야해요. 이렇게 발도하는 Task 를 만들어줍니다. 그리고 아래처럼 노드를 연결해 줄게요.
감지에 대해 먼저 해볼게요.
BP_Enemy 에서 AIPerception 컴포넌트를 만들어 주고 이 부분을 주목합니다. 다시 자손 블루프린트인 BP_Enemy_Melee로 내려온 다음 요기서 AI 시야 구성을 선택하고 인덱스 열어줍니다.
몇가지 설명하자면,
시야반경 : 인식 범위를 뜻합니다.
시야 상실 반경 : 한번인식을 한 경우 인식을 잃어버리기까지의 거리를 의미합니다.
최대 수명 : 인식 후 인식 반경을 몇초동안 벗어나야 인식이 사라지는지를 의미합니다. 0일 경우 절대 인식이 사라지지 않아요.
마지막으로 본 위치에서 범위 자동 성공 : 인식에서 벗어날 경우, 벗어난 인식 위치에서 얼마나 멀어져야 인식이 사라지는지를 뜻합니다.
뷰 후방 오프셋 포인트 : 시야각의 중점을 후방으로 얼마나 뒤로 가게 할 지 정합니다.
근거리 클리핑 반경 : 근거리의 시야를 얼마나 자를지 의미합니다. 이와 뷰 후방 오프셋을 결합하여 근거리에 올 경우 인지할 수 있도록 구현 할 수도 있어요.
그다음으로 듣기 구성. 비슷합니다. 시야랑. 우리는 효과음 설정도 해줄 것이기에 추가 해둘게요.
추가내용.
사운드 관련 해서도 다루었습니다. 효과은 하나 가져온 뒤, 반복을 위해 사운드 큐를 만들어줍니다. 무한루프 걸어주고요. 여기서 2D 사운드는, 거리 상관 없이 같은 크기로 들리는 사운드을 의미합니다.
반대로 3D 사운드는, 거리 개념이 추가되어 소리의 감쇠가 발생하는 사운드 입니다. 적용 방법은 사운드 재생을 아래처럼 해주면 됩니다. Overlap 이벤트 기반으로 소리가 발생하며, Location 에서 소리가 발생한다는 개념이고, Sound 에는 사운드큐를, Attenuation Settings 에는 거리 음향 효과를 넣어줍니다.
Attenuation Settings 에 대해 더 보자면, 아래처럼 어테뉴에이션을 만들어주고요.
아래처럼 설정 값들을 조금 수정 해주면 거리음향을 구현할 수 있습니다. 설정이 더 있지만, 가시성을 위해 주요한 내용만 캡쳐해두었어요. 공간 음향에 대해 전문적으로 구현할 것이 아니기에 각 요소에 대한 설명은 생략합니다. 사실 잘 읽고 수치 조절해가면서 해보면 원하는 효과를 넣을 수 있을 것 같아요.
다시 돌아와서 음향 효과를 통해 인지가 되는지를 보아야겠죠. 애니메이션 노티파이를 추가하여 해당 노티파이 발생 시 효과음이 나도록, Pawn이 Noise를 발생하도록 해주어야 합니다. 음향효과, Pawn의 Noise가 뭐가 다르냐? 라고 하실 수 있는데, 언리얼에서는 "사람이 듣는 소리가 났다" 와 "객체가 인지하는 소리가 났다" 라는 것이 다릅니다. 따라서 따로 Noise 를 발생시켜주어야 합니다.
기본 공격 시 애님 노티파이를 넣어줍니다. 3번 트랙에 해당되는건 위의 Noise 및 효과음 발생, 그리고 4번 트랙은 효과음만 발생 입니다. 위에서 말 했듯이 단순히 소리가 나는건 사람만 인지하기 때문에, 우리는 3번트랙에 집중해야 합니다.
이부분이 구현부입니다. Notify를 받게되면 아래 함수가 실행되는데, 주목할점은 SpawnSoundAttached, PawnMakeNoise. 순서대로 컴포넌트에 부착된 소켓 이름을 넣어주고, 사운드 에셋을 넣어주면 해당 에셋이 소켓에서 재생됩니다. 그리고, 객체들이 인지하기 위한 노이즈는 PawnMakeNoise를 통해 발생시키는거죠.
결과물.
정리
내용이 많아져 다음 글로 넘겨야겠네요. 오늘 한 내용을 정리하면,
1. AI 기본 설계
2. AI 시나리오
3. 탐지 타입 설명
4. 공간 음향 설명
까지 설명했어요. 이제 인
지한 Target을 토대로 AI가 발도, 이동, 공격 까지 하는걸 목표로 구현 해보겠습니다.
'UnrealEngine' 카테고리의 다른 글
[UE5] 7주차 4번. 본격적인 Enemy AI - 3 (2) | 2025.01.31 |
---|---|
[UE5] 7주차 3번. 본격적인 Enemy AI - 2 (0) | 2025.01.23 |
[UE5] 7주차 1번. AI 튜토리얼 (0) | 2025.01.21 |
[UE5] 6주차 6번. 애니메이션 부분 적용 (2) | 2025.01.20 |
[UE5] 6주차 5번. 캠 회전 테크닉 & 데미지 및 사망 효과 (0) | 2025.01.20 |
블로그의 정보
만두네민박
pmj6541