47. BTT_LookAt 태스크 / AI Perception 컴포넌트 / Sound2D, 3D
BTT_LookAt 태스크
BT_Enemy_Melee 비헤이비어 트리에서 사용하기 위해 저번 시간에 추가했던 새 태스크(BTTask_BlueprintBaseNew)의 이름을 BTT_LookAt으로 바꾸어주었다.
* BTT_LookAt : Target이 Set되면 해당 Target을 바라보도록 부드럽게 회전시켜줄 태스크
우선 현재 BTT_LookAt 태스크가 잘 작동하는지 확인하기 위해서 잠시 수정해준 부분이 있다.
먼저 이벤트그래프에서 기존에 Target에서 Actor를 받아오던 로직을 Vector를 받도록 수정하였다.
다음으로 Receive Tick AI 함수에서는 Target변수에서 Vector를 받은 NewVar0변수를 FindLookatRotation의 Target 인자로
바꿔주었다 (이전에 했던 것들은 지우지 말고 냅두자)
BT_Enemy_Melee 비헤이비어 트리
Sequence 다음으로 수행해주기 위해 Simple Parallel을 추가해주었다.
우선 구조를 만들어만 두고 아직 연결은 하지 않은 상태이다.
여기서 Simple Parallel을 추가해준 이유는, 무기 장착(BTT_Arm)과 동시에 Target에 대한 회전(BTT_LookAt)이 동시에
이루어져야 하기 때문에 선택하였다.
해서 Main 태스크는 BTT_Arm, Sub 태스크는 BTT_LookAt이 되었다.
BTT_Arm에 있던 데코레이터 BTD_IsArmed를 Simple Parallel에게 옮겼다.
AI Perception 컴포넌트
Enemy가 캐릭터를 감시하는 형태라고 한다면 Enemy에게 특정 범위를 주고 해당 범위와 캐릭터가 충돌 시, 이를 Enemy가 감지하여 캐릭터가 Target에 지정이 되는 방식일 것이다.
언리얼엔진에서는 이러한 기능을 지원해주는 컴포넌트가 있다.
바로 AI Perception 컴포넌트를 BP_Enemy에 추가해준다.
그 후에 BP_Enemy를 클래스 세팅 - Generate Abstract Class(가상 클래스 지정)를 활성화 해준다.
이에 따라서 BP_Enemy에 설정되어 있던 기본값들을 지워주었다.
- Behavior Tree 변수 기본값 비우기
- Weapon Classes에 들어있던 Weapon들 지우기
- BP_Character에 있는 AttackIndex / bAttackEnabled / bAttackTransited, State, LifeNow 변수 프라이빗 설정
이후 가상 클래스가 된 BP_Enemy의 자손 블루프린트로 BP_Enemy_Melee를 생성했다.
BP_Enemy_Melee에서 AI Perception 컴포넌트의 디테일에서 Senses Config에 원소를 추가해줄 것이다.
* 원소에 추가할 수 있는 것들은 해당 컴포넌트가 가질 수 있는 감각들을 보여준다.
AI Sight config(시야)
- Sight Radius : 목표를 인식할 수 있는 최대 시야 거리
- Lose Sight Radius : 이미 본 타깃을 놓치게 되는 최대 시야 범위
- PeripheralVisionHalfAngleDegrees : AI가 얼마나 넓게 볼 수 있는지 지정해주는 시야
- Detection by Affiliation : Enemy(적), Neutrals(중립), Friendlies(아군)이 Sense를 감지할 수 있는지 결정
ㄴDetect Enemies
ㄴDetect Neutrals
ㄴDetect Friendlies
- Auto Succes Range from Last Seen Location : 보였던 타깃이 마지막으로 보인 위치에서 해당 범위 내로 다시 보인다면 다시 타깃 추적 가능
- Point of View Backward Offset : 특정 값만큼 시야를 더 뒤에 옮겨줌
- Near Clipping Radius : 시야의 시작 부분을 해당 값만큼 잘라냄
- Debug Color : 디버그 시 보이는 색상 지정
- 최대 수명 : 이 Sense 에서 받은 자극이 잊혀져서 추적이 소멸하기까지 걸리는 시간
- Start Enabled : 해당 Sense 활성화 여부
AI Perception 컴포넌트 내에 사용가능한 이벤트
이 중에서 On Percetion Updated / On Target Perception Updated / On Target Perception Info Updated 3가지의 이벤트가
가장 많이 사용된다.
위 3가지 이벤트는 모두 AI Perception이 특정 대상을 인지했을 경우에 자동으로 호출되는 공통점이 있다.
On Target Perception Info Updated 이벤트가 이들 중에 가장 자주 사용된다고 한다.
AI Hearing config(청각)
- Hearing Range : 들을 수 있는 범위
사운드(2D, 3D)
BP_Enemy의 AI Perception 컴포넌트의 AI Hearing config(청각)을 테스트하기 위해선 현재 레벨에 배치해줄 사운드를
직접 만들어보았다.
* 언리얼엔진에서 사운드는 .wav 확장자만 사용이 가능하다.
적절한 사운드를 찾기 위해서 콘텐츠 브라우저에서 엔진콘텐츠표시 - 필터/사운드/사운드웨이브에서 원하는 사운드를
복사해온다.(WhiteNoise)
그리고 복사해온 WhiteNoise 사운드 우클릭 - 큐 생성을 하여 WhiteNoise_Cue를 만들어주었다.
이렇게 만든 WhiteNoise_Cue 파일 내부에서 사운드가 계속 Loop하여 들릴 수 있도록 설정해주었다.
2D 사운드
Sound 2D는 청취자의 위치와 관계없이 나오는 사운드를 말한다.
2D 사운드를 블루프린트 클래스에서 추가하여 재생해주는 방법은 해당 이벤트그래프에서 PlaySound2D 노드를 사용하여
재생하고자 하는 Sound를 지정해주면 된다.
3D 사운드
Sound 3D는 청취자의 위치에 따라서 소리의 크기가 달라진다.
3D 사운드는 Play Sound at Location을 통해서 재생해주었다.
위치에 따라서 소리가 감쇠하는 것은 해당 사운드(WhiteNoise_Cue)에서 직접 설정해줄 수 있다.
먼저 WhiteNoise_Cue 내의 디테일에서 Override Attenuation(감쇠 오버라이드 여부)를 활성화 시켜준다.
- 감쇠 함수 : 거리 알고리즘 - 거리에 대한 함수로 사용할 어테뉴에이션 유형
- 감쇠 모양 : 어테뉴에이션 메소드 모양
- 내부 반경 : 사운드 감쇠가 시작되는 지점을 정의하는 반경(최대로 사운드를 들을 수 있는 거리)
- 감쇠 거리 : 이 거리에 걸쳐 볼륨 어테뉴에이이 발생(어디까지 감쇠가 적용될지의 거리)
플레이 후 디버깅 화면
언리얼엔진에서 플레이 후, 작은따옴표(') 키 입력 시, 화면 좌측 상단에 디버그 창이 뜨는 것을 볼 수 있다.
우리가 AI Perception을 사용하면서 봐야할 부분은 4번 Perception인데, 4번을 활성화하면 각 Sense의 범위와 동작을
실시간으로 볼 수 있다.