시작에 앞서, 비헤이비어 트리의 Chase Selector 부분을 조금 수정했다.
플레이어가 숨어도 확실하게 접근해서 확인하도록 하기 위해서이다.
이제 비헤이비어 트리에서 쓴 BTTask를 만드는 과정을 담을 것이다.
BTTask 역시 블루프린트 에셋으로, 다음과 같이 만들 수 있다.
BTTask_MoveRandomLocation 이름으로 블루프린트를 만들어 이벤트 그래프를 열면, 좌측의 My Blueprint 탭의 Functions 섹션에 (5 Overridable) 표시가 있을 것이다.
말그대로 BTTask Blueprint Base 부모클래스에 정의되어있는 함수를 재정의할 수 있는 것이다. Override 버튼을 눌러, Receive Execute AI를 만들고 노드를 다음과 같이 짜주었다.
GetRandomReachablePointInRadius는 노드이름 그대로 Origin 주변에 도달할 수 있는 포인트를 만들어 준다.
Radius와 Acceptance Radius가 변수로 있는데,
Radius는 랜덤 포인트를 생성할 수 있는 반경,
Acceptance Radius는 포인트까지 이동하는 목적지로 삼는 목적지로부터의 반경이다.
즉, 딱 그 위치까지 가지 않아도 적당히 가까이 가면 된다는 의미이다.
두 변수는 public으로 만들어, 비헤이비어 트리에서 값을 바꿀 수 있도록 하였다. 왼쪽 변수 목록에 떠진 눈 표시가 이 변수가 public임을 의미한다.
*** 자주들 하는 실수로, 마지막에 Finish Execute 노드로 성공 여부를 전달하지 않으면 태스크는 끝나지 않는다.
그 다음은 BTTask_ClearBlackBoard의 내부이다.
Blackboard Key를 Clear Blackboard Value 노드를 통해 값을 지운다.
지난 포스팅에 이어 한번 더 강조하자면, 값을 0으로 만드는 것과 지우는 것은 엄연히 다른 것이다.
즉 값을 '비활성화'시키기 위해서는 Clear Blackboard Value를 사용해야 한다.
BTTask 두개가 완성되었으니, 이제 AIController에서 Sense Handling 함수를 만들어 줄 시간이다.
그리고 AI_Enemy의 이벤트 그래프를 다음과 같이 짜주었다.
두 함수의 진행 과정에 대한 설명은 블루프린트 내부 코멘트로 달아두었다.
그리고 중간중간에 BP_Enemy의 이벤트를 호출하고 있는데, 그 내용은 아래와 같다.
다음은 테스트 영상이다.
사실 비헤이비어 트리를 수정하기 전 영상이라 AI 동작이 조금 다르다. 이런 느낌이다만 알면 좋을 것 같다.
https://www.youtube.com/watch?v=RtBI96Y1c5Q&ab_channel=Ciel45
'언리얼 엔진 5 > 개발 일지' 카테고리의 다른 글
[UE5] 블루아카이브 TPS게임 개발일지 (24) - EQS를 이용한 엄폐 AI 1 (0) | 2024.01.01 |
---|---|
[UE5] 블루아카이브 TPS게임 개발일지 (23) - 비헤이비어 트리를 이용한 적 AI 제작 4 (0) | 2023.12.31 |
[UE5] 블루아카이브 TPS게임 개발일지 (21) - 비헤이비어 트리를 이용한 적 AI 제작 2 (0) | 2023.12.30 |
[UE5] 블루아카이브 TPS게임 개발일지 (20) - 비헤이비어 트리를 이용한 적 AI 제작 1 (+AI Controller) (0) | 2023.12.30 |
[UE5] 블루아카이브 TPS게임 개발일지 (19) - 총알 투사체 제작 (Projectile Movement) (0) | 2023.12.30 |