언리얼 엔진 5/개발 일지

[UE5] 블루아카이브 TPS게임 개발일지 (23) - 비헤이비어 트리를 이용한 적 AI 제작 4

ciel45 2023. 12. 31. 15:25

이번엔 촉각, 예측 AI 기능을 추가할 것이다.

 

 

AI_Enemy (AI Controller) 블루프린트의 AIPerception에 또 새로운 config을 추가해주었다.

+를 눌러 element 추가, AI Touch config과 AI Prediction sense config을 각각 선택

 

이것들은 둘다 딱히 내부적으로 설정할 건 없다. 그냥 추가만 해주면 된다.

 

 

AI에 촉각이 생겼으므로 촉각을 인지하여 블랙보드 키를 세팅해주는 함수를 만들 차례이다.

위의 이미지의 좌측 Functions 섹션에 Handle Touch Event를 추가해둔 것이 그것이다.

 

 

함수 내부는 기존 것들과 거의 비슷해서, 설명은 주석이 달려있는 블루프린트 이미지 한 장이면 충분할 것 같다.

 

 

 

이제 플레이어의 위치를 예측하는 함수, Handle Prediction의 내부를 구현할 차례이다. (마찬가지로 AI_Enemy 블루프린트 이미지를 보면 이미 만들어둔 것을 볼 수 있다.)

 

 

이 함수도 매우 간단하여, 이미지 내 주석으로 설명을 대체한다.

 

 

보면 알겠지만, 플레이어의 추정 위치를 블랙보드의 LastKnownLocation에 집어넣는다.

 

원래는 플레이어가 시야에서 사라지기 직전의 위치를 저장했지만, 이제는 한 단계 더 가서 플레이어가 시야에서 사라진 뒤 어디로 이동했을 지 예측하여, 그 위치를 저장하겠다는 의미이다.

 

이 말인 즉슨, Handle Sight Sense 함수를 수정해야 한다.

수정한 부분은 함수의 후반부이다. 

 

우측 하단의 노드들은 Prediction을 사용하지 않고 바로 LastKnownLocation을 저장하던 로직이다.

 

새로 만든 것은 우측 상단의 노드들이다. 시각 자극을 느끼는데 실패한다면, 즉 시야에서 플레이어가 사라진다면,

 

1.

먼저 Enemy의 Lose Player 이벤트를 수행한다.

상기하자면 BP_Enemy에서 만든 이벤트로, 로그에 '플레이어 놓침'을 찍어주고 이동속도를 낮춘다.

 

2.

그 다음으로 Request Pawn Prediction Event 노드를 통해 시야에서 사라진 플레이어가 어디로 갔을 지 예측한다.

노드의 Predicted Actor 인풋은 위치를 예측할 액터를 의미한다. 즉 여기서는 플레이어를 꽂아주면 된다.

 

하단의 Prediction Time이 0.5초인 것은, 시야에서 사라진 플레이어의 0.5초 뒤의 위치를 예측하겠다는 의미이다.

이 시간이 너무 길면 오히려 엉뚱한 곳으로 예측하기 쉽고, 너무 짧으면 예측을 하는 의미가 없을 것이다.

 

 

이렇게 구현이 완료되었으므로, AI_Enemy의 On Target Perception Update에 함수들을 모두 연결해주었다.

다만 터치 이벤트는 나중에 따로 수정할 것이다.

왜냐하면 칸나가 적과 몸이 닿을 정도로 가까이갔다면, 발소리로 이미 눈치챘어야 정상이기 때문에, 사실상 쓸모가 없기 때문이다.

터치 이벤트는 적이 총을 맞았을 때 발생하도록 할 생각이다.

 

다음은 Prediction의 테스트 영상이다.

https://youtu.be/pxLcBzARNGE

 

참고로, 저렇게 AI의 동작을 화면상에 표시하려면 어퍼스트로피 키(엔터 왼쪽에 있는 키)를 누르면 된다.

추가로 Perception 시스템을 표시하고자 한다면, 숫자패드 4를 누르면 된다.