https://gamdekong.tistory.com/category/%EC%96%B8%EB%A6%AC%EC%96%BC%20%EC%97%94%EC%A7%84
작업은 위 게시물을 이어서 한다.
우선 Behavior Tree를 생성해 준다.
다음, EnemyCharacter를 다음과 같이 추가한다.
빌드후, Enemy 블루프린트를 열어보면 다음과 같이 BehaviorTree가 추가된것을 볼 수 있다.
미리 생성한 Behavior Tree를 적용시킨다.
다음은, EnemyController에서 BehaviorTree를 사용하기 위해 다음과 같이 코드를 수정한다.
이젠 BehaviorTree를 사용할 준비가 되었다.
하지만 BehaviorTree에서 캐릭터의 데이타를 사용하기 위해서 Blackboard가 필요하다.
다음과 같이 Blackboard를 생성한다.
다음, BehaviorTree에 해당 Blackboard를 적용시킨다.
그후, 마찬가지로, Controller에서 Blackboard를 사용할수 있도록 다음과 같이 수정한다.
빌드를 해준다.
이젠 Enemy가 근처에 Player가 있는지 없는지 확인하는 서비스를 만들어 보자.
기본적으로 서비스는 정해진 빈도에 맞춰 실행되어 데이타를 갱신 할 수있다.
여기서는 Enemy와 Player간의 거리를 갱신하는 용도로 사용한다.
BehaviorTree에서 NewService를 클릭하여 서비스를 생성한다.
생성된 서비스의 이름을 적절하게 변경한다.
Blackboard의 데이터를 갱신하기 위하여 다음과 같이 Blackboard에 Bool데이타를 생성한다.
이젠 생성된 서비스에서 IsPlayerWithin값을 변경하도록 다음과 같이 서비스를 작성한다.
IsPlayerWithinKey는
위와 같이 작성후 BehaviorTree를 다음과 같이 수정한다.
이젠 CheckPlayerWithin 서비스는 0.1초마다 채크하며 Blackboard의 IsPlayerWithin을 갱신한다.
이후, Player가 500 이내에 있을경우 추적하도록 작성한다.
데코레이터는 일종의 조건절과 같다. 또한 새로운 데코레이터 또한 만들수 있다.
여기서는 IsPlayerWithin이 true라면 실행하도록 설정한다.
Player를 추적하기 위해서 앞서 생성한 CheckPlayer Service를 수정하여 bool값뿐만 아니라 Player의 위치값도
저장하도록 수정해보자.
우선 블랙보드에 다음과 같이 추가한다.
그후, 서비스를 다음과 같이 수정한다.
이젠 Player와의 거리를 채크하면서 일정거리 내에 있다면 PlayerActor에 Player를 넣는다.
Player가 일정 거리 이내에 있다면 Player를 쫓는 테스크를 만들어 보자.
이젠, Player가 일정거리내에 있다면 Player를 쫓는다.
다음은 Player가 특정 거리내에 없을경우 patrol을 하도록 BehaviorTree를 작성해보자.
저번 게시물에서 저장한 patrol위치를 Blackboard 데이타에 입력시키도록 수정한다.
Blackboard에 패트롤을 위한 데이타를 추가한다.
EnemyCharacter를 다음과 같이 수정한다.
빌드후,
BehaviorTree를 다음과 같이 추가한다.
위와같이 설정하면, Player가 일정 거리내에 없다면 패트롤을 순서대로 실행한다.
'언리얼 엔진' 카테고리의 다른 글
AI Perception을 이용한 AI Sight, Hearing(시야, 소리) 구현하기 (0) | 2022.04.06 |
---|---|
Character AI 이동, 점프 구현 (0) | 2022.03.09 |
Projectile 구현 및 발사하기 (0) | 2022.02.10 |
Anim Notify State 이용하여 공격 구현하기 (0) | 2022.02.02 |
Anim Notify 이용하여 공격 에니메이션 마무리하기 (0) | 2022.02.02 |