🎮Unreal4/Blueprint

[UE4] Enemy AI -6 : EQS를 이해하기 위한 예제 (Distance, Dot, Trace/Visibility)

공대 컴린이 2023. 2. 23. 18:59
728x90

💡 EQS를 이해하기 위한 예제

EQS의 테스트를 작성할 땐 처음에 무조건 점수(Score)값이 Test Purpose에 하나 존재해야 한다. 점수가 안나오면 Filter Only를 맨위에 쓸 수 없다.

🚩 예제1 - Distance. Filter와 Score를 적용하고 2D 거리를 측정하여 거리 300 이하는 자르기

🚩 예제2 - Dot. Enemy AI(Querier)와 Item 간의 내적 값 중 0.3 ~ 0.75 사이의 값만 선정하기

위에서 점수를 매기고 아래 테스트에서 또 점수를 매기면 두 점수가 합산되어 나온다. 따라서 밑에는 굳이 점수를 매길 필요 없이 Filterling만 진행

 

내적값이 0.3 ~ 0.75 이내의 값만 선정되고 나머지는 잘린 모습

🚩 예제3 - Trace (Visible). Line 충돌을 이용하여 전 채널의 위치를 검사하여 가려진 곳을 1로 출력

🚩 예제4. 위 3개의 예제를 모두 적용하여 AI가 볼 수 없는 벽 뒤에 위치를 반환하도록 설정

EnvQueryContext 

Distance나 Dot 테스트를 작성할 때 EnvQueryContext 라는 EQS 노드의 레퍼런스를 설정한다. 

 

비헤이비어 트리를 가지고 있는 AI를 Querier로 보고, 테스트를 통해 찾을 하나하나의 위치/액터를 Item로 본다.

따라서 위에 예제들에선 전부 AI와 Item 간의 테스트를 작성하여 Enemy 입장에서의 필요 위치를 구했지만, 실제로 내가 필요한 것은 Player의 입장에서의 위치를 구해야 하기 때문에, Player EnvQueryContext를 따로 생성해주었다.

 

EnvQueryContext는 액터 또는 위치로 설정할 수 있으므로 함수의 오버라이드 정보들도 액터 또는 위치를 설정할 수 있도록 구성되어있다.

 

EnvQueryContext_Player

EnvQueryContext_BlueprintBase를 상속받는 블루프린트 클래스를 하나 생성하여 블랙보드의 타깃을 액터로 변환하여 반환해주었다.

 

따라서 진행될 다음 예제에서는 이렇게 만들어진 Player 액터를 기준을 잡을 수 있다.

🚩 예제5.  내적을 이용한 AI 와 Player의 각도 구하기

두 벡터의 내적을 이용하여 AI - Item의 벡터와 AI - 플레이어 사이의 각도를 구할 수 있다.

내적 결과 플레이어와 AI 사이의 위치는 내적 값이 1이고 AI의 뒤로 갈수록 0에 가까워진다.

728x90