저번 시간에는 AI 가 플레이어를 쫓아가게 하기 위해 필요한 테스크를 작성해 보았다. 오늘은 그 태스크들을 이용하여 플레이어를 쫓고 공격 범위 안에 있으면 공격하게 비헤이비어 트리를 작성해 보겠다.
먼저, NPC 클래스 안에 공격을 위한 콜리전을 추가해주자. AICharacterBase 에 다음과 같은 코드가 있었다.
if (RightFistCollisionBox)
{
RightFistCollisionBox->SetupAttachment(GetMesh(), TEXT("hand_r_socket"));
}
보면 RightFistCollisionBox 가 있다면 hand_r_socket 에 부착하라는 내용의 코드이다. 그럼 이 hand_r_socket 은 무엇이고 어디에 있는가? 이는 우리가 사용할 NPC 의 스켈레톤에 이를 추가해주면 된다. 먼저 사용하는 NPC의 스켈레톤을 열어보자.
보면 뼈들이 존재하고 우리는 이 뼈들을 선택해 소켓을 추가할 수 있다. 이 소켓을 추가한다면 애니메이션 등 뼈들이 움직일 때에도 소켓은 종속된 뼈와 같이 움직이는 성질을 가지고 있다. 나는 주먹을 휘두르는 애니메이션이 오른쪽 손 이기에 여기에 소켓을 추가하여 RightFistCollisionBox 를 붙여주겠다.
hand_r 을 클릭하고 우클릭을 눌러 소켓을 추가해주자. 소켓 이름은 hand_r_socket 으로 이름을 붙여주었다. 생성한 뒤 NPC 의 블루프린트를 보면 상자 하나가 캐릭터의 발 밑에 존재하는 것을 볼 수 있다. 이는 따로 블루프린트에서 붙여줄 필요없이 소켓에 이미 연결되어 있으므로 (C++ 에서 정의 해주었기 때문에) 바로 오른쪽 손으로 박스를 위치해준 뒤 크기를 설정해준다.
이제 준비해둔 애니메이션을 몽타주화 해서 선택해주자.
애니메이션 관련은 나중에 다시한번 기획을 잡아 설명하겠다. 일단은 믹사모에서 가져온 애니메이션을 리타기팅하여 만들었다는 점만 알아두자. 이제 준비는 끝났으니 비헤이비어 트리를 작성해보도록 하자. 이번에는 만들어둔 랜덤패스를 가지고 작성해보겠다.
현재 랜덤패스 비헤이비어 트리는 이런 모습이다. 여기서 Can See Player 에 우클릭을 눌러 Service 를 추가해준다.
전에 만들어준 서비스인 Is Player in Melee Range 를 선택해주자. 이제 필요한 블랙보드 키를 만들어준다.
블랙보드로 넘어가 새 키를 눌러 bool 변수 추가해주자. PlayterIsInMeleeRange 라 이름을 붙여주면된다.
그리고 다음과 같이 Melee Range 는 약 80 정도로 두고 블랙보드 키를 PlayerIsMeleeRange 로 선택해 매 순간마다 플레이어가 NPC 공격 범위 안에있으면 true 를 반환하게 만들어 준다
. 그리고 아래의 테스크에 Melee Attack 을 추가해주고 블랙보드 키를 PlayerIsInMeleeRange 를 선택해주자. 이제 NPC를 월드에 배치해보면 캐릭터를 따라와 잘 때린다!
AICharacterBase 클래스에 캐릭터의 공격력, 체력에 대한 코드가 있으니 이를 잘 확인하고 사용하자.
이렇게 AI 적 만들어보기 시리즈가 끝이났다. 적고싶은 내용이 많지만 숙지가 완벽하지 않아 아직은 포스팅하기 어려울 것 같다.
'Unreal > 따라해보기' 카테고리의 다른 글
멀티플레이 RPG System 만들기 (1) - Unreal Engine (0) | 2025.03.28 |
---|---|
블루프린트로 채팅 만들기(1) - Unreal Engine (0) | 2025.03.18 |
AI 적 만들어 보기 (4) - Unreal Engine (C++) (0) | 2025.03.05 |
AI 적 만들어 보기 (3) - Unreal Engine (C++) (0) | 2025.02.20 |
AI 적 만들어보기 (2) - Unreal Engine(C++) (0) | 2025.02.18 |