본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-32

BT 데코레이터 및 셀렉터

현재는 간단하게 플레이어에게 왔다가 일정 시간 지나면 원래 위치로 돌아가는 시퀸스를 설정하였다.

우리의 목표는 플레이어가 보이면 플레이어 위치로 이동하고, 아니라면 플레이어의 마지막 위치로 이동하는 것이다.

이러한 기능을 위해 셀렉터 노드를 사용할 수 있다.

셀렉터 노드 아래 위치한 내용은 첫 태스크가 성공할 때까지 실행하게 된다.

 

그리고 시퀸스의 데코레이터 기능을 통하여 조건을 설정하는 것이 가능하다.

우리는 기존의 블랙보드 키를 이용할 것이므로 블랙보드로 설정한다.

 

아래는 현재 SelfActor가 설정된 상태이다.

우리는 플레이어 위치를 찾아야 하므로 플레이어 위치로 설정해주자.

그러면 플레이어 위치가 존재한다면 해당 시퀸스를 실행하게 된다.

 

만약 플레이어 시야에서 사라지면 거기까지 가려고 계속 시도할 것이다.

우리는 이것을 중단할 수 있게 하고 싶다.

 

이를 위해 옵저버 항목을 바꿀 수 있으며 self 기능을 선택하면 조건 거짓시 셀렉터 재평가,

lower priority 기능을 선택하면 블랙보드 조건 참일시 다른 작업 멈추고 해당 조건을 실행하게 할 수 있다.

우리는 2가지 기능 모두를 원하므로 both를 선택해주자.

이를 통해 지속적으로 상태를 확인하고 즉각적으로 반영하는 것이 가능하다.

 

이제 플레이어가 마지막으로 갔던 위치를 표시해줄 블랙보드 키를 추가로 만들어주고, VScode에서 작업해주자.

 

기존 LinOfSightTo 함수를 이용해 플레이어가 시야에 있는 지를 체크하고, 있을 시 PlayerLocation과 LastKnownPlayerLocation 블랙보드 키에 대한 값을 얻어준다.

만약 시야에서 사라지면 플레이어 위치는 알 수 없게 되므로, PlayerLocation에 대한 블랙보드 키 값을 제거해준다.

이제 실행시켜보면 플레이어가 사라지면 플레이어의 마지막 위치로 이동하는 모습을 볼 수 있다.