AI Perception 컴포넌트는 이름 그대로 AI에게 인지능력을 주는 컴포넌트이다. 이 프로젝트에선 시각, 청각, 대미지를 인지할 수 있도록 하였다.


' 키를 누르면 AI Debugger가 실행되고, Num pad 4를 누르면(넘패드에서 눌러야 함) 위에서 설정한 AI Perception 컴포넌트를 시각적으로 확인할 수 있다.

Report Noise Event/Report Damage Event - AI Perception 컴포넌트에게 각각 소음과 대미지 이벤트를 알리는 노드. 실질적으로 소음과 대미지가 발생하는 것은 아니다. 소음과 대미지의 실질 적용은 Make Noise와 Apply Damage로 한다.
- AI Perception 컴포넌트를 이용해 컨트롤러는 자극을 감지할 수 있다. 이벤트그래프에서 자극을 감지하면 어떻게 반응할 지 설정해야 한다.

On Perception Updated(AIPerception)
Can Sense Actor
- 적이 액터(플레이어)를 인식할 때 어떤 자극에 의해 감지하는지를 결정하는 함수
- 어떤 감각으로 플레이어를 인지했는지, 플레이어를 인지하는 것에 성공했는 지를 반환한다.
Get Actor Perception노드로 액터의 정보를 받아오고, 받아온 정보와 Enum으로 정의해둔 감각 리스트(AI Sense Hearing, AI Sense Damage, AI Sense Sight)와 동일하다면 해당 감각과 인지 여부를 반환한다.

Get Current State(인터페이스 함수)), 현재 상태에 따라 상태를 변화 시킨다.
HandleSensedSight - 발견한 액터가 플레이어라면, Passive/Stunned/Investiagting 상태일 때 적 캐릭터를 공격 상태로 전환하며 공격 목표로 플레이어를 지정한다.

HandleSensedSound - Passive/Investigating 상태일 때 청각 자극이 주어지면 적 캐릭터를 탐색 상태로 만들며, 자극이 발생한 장소를 Location으로 전달한다.

EQS는 플레이어와의 거리, 주변 환경, 시야 등을 종합해 적이 움직일 장소를 고르는 것에 사용된다.


OnCircle : ...

Querier 주변으로 포인트가 생성되는 건데, 우리가 원하는 것은 플레이어 주변으로 생성되는 것이기 때문에 컨텍스트를 AttackTarget, 즉 플레이어로 지정하도록 컨텍스트를 새로 만들어야 한다.PathExist: from Querier
Distance: to Querier

Context 조건 새로 만들기
- 새 블루프린트 클래스 만들기로
EnvQueryContext_BlueprintBase를 선택하여 만들어준다.
- Return 노드에서 반환하게 되는 Resulting Actor가 컨텍스트가 된다. 우리가 원하는 것은 플레이어가 컨텍스트가 되는 것이니 AI Controller에서 이미 사용하고 있는
AttackTarget을 불러와 지정해준다.- 위 연결되어 있지 않은 노드는 테스트용 노드. 플레이어가 아닌
EQS TestPawn이라는 클래스(별도로 존재함)를 컨텍스트로 만드는 용도. EQS를 시각화하여 테스트해볼 수 있다.


PathExist: from Querier
Trace: to Context on Visibility

Bool Match 옵션을 체크 해제하면 반대로 컨텍스트에게 라인트레이스가 가능한 거리만 선택하게 된다.
Distance : to Querier

Inverse Linear로 바꾸면 멀 수록 낮은 점수를 갖게 된다. (Constant는 거리 상관없이 같은 점수, Linear는 멀 수록 높은 점수)EQS Strafe와 비슷한 역할

SimpleGrid: generate around Context
PathExist: from Querier
Trace: to Context on Visibility
Bool Match 옵션을 체크 해제.Distance: to Context / to Querier
Linear)가 배정된다.
이렇게 만든 EQS는 위처럼
Run EQS Query노드를 통해 사용할 수 있다.

PointOfInterest에 EQS의 결과가 되는 위치 벡터를 저장해놓았고, 바로 다음 MoveTo 노드에서 해당 블랙보드 키를 이용해 이동하게 하였다.