Ludens
의 Unreal-Study 자료입니다.Player 도 Combo Attack 을 할 수 있는데, Enemy 라고 못할 이유는 없겠죠? 우리의 Enemy 는 3단 Combo Attack 이 가능하게 할겁니다.
- Attack 1 은 3단 Combo 의 1단계입니다.
우선 BTT 를 생성해줍시다. 이름은 Attack1 으로 하고, 열어줍시다.
Play Anim Montage 노드의 Anim Montage 에셋 이름은 'Primary_Attack_A_Normal_Montage' 입니다.
그리고 BTT 가 잘 작동하는지 확인해보기 위해 간단한 BT 를 짰습니다.
- 저는 주로 아래와 같은 방식으로 BTT 의 작동을 확인합니다. 참고해두시면 좋을 것 같습니다.
- EnemyAnimBP 의 AnimGraph 에 Default Slot 을 추가해주어야 합니다.
AI 폴더에 BTT 를 생성해줍시다. 이름은 Attack2 로 합시다.
Attack 1과 Montage 를 제외한 모든 것이 똑같습니다.
- Attack 1의 이벤트 그래프를 복사해오신 후, Montage 만 바꾸시는 것을 추천합니다.
Play Anim Montage 노드의 Anim Montage 에셋 이름은 'Primary_Attack_Normal_Montage' 입니다.
바꾼 뒤, 확인을 위해 BT 에 BTT 를 추가합시다.
Combo Attack 의 마지막입니다. AI 폴더에 BTT 를 생성해주고 이름은 Attack3 로 합시다.
Attack 1, Attack 2와 Montage 말고도 다른 점이 하나 더 있습니다.
- 나머지는 똑같습니다.
바로 벡터의 곱셈 값입니다.
- 빨간색 박스의 곱하기 값을 X : 3500, Y : 3500 으로 바꿔줍시다.
Play Anim Montage 노드의 Anim Montage 에셋 이름은 'Primary_Attack_B_Normal_Montage' 입니다.
바꾼 뒤, 확인을 위해 BT 에 BTT 를 추가합시다.
- Primary_Attack_A_Normal_Montage 를 찾아서 열어봅시다.
- 이 작업을 Primary_Attack_Normal_Montage, Primary_Attack_B_Normal_Montage 에도 해주면 됩니다.
- 일정 거리(Distance)는 400으로 하였습니다.
AI MoveTo 노드의 입력 값인 Destination 에 Player 의 위치가 입력되고, 입력된 값에 대한 처리가 'Attack' BTT 의 Launch Character 노드의 입력 값인 Launch Velocity 보다 우선 순위이기 때문에, 짧은 거리를 빠르게 Dash 하지 않고, 최대 걷기 속도로 이동하는 것입니다.
- 그러므로 우리는 Stop 이라는 BTT 를 추가하여 AI MoveTo 노드의 Desination 입력 값을 바꿔줌으로써 문제를 해결할 것입니다.
AI 폴더에 BTT 를 생성하고 이름은 Stop 으로 해줍니다.
변수를 하나 생성해줍시다.
- EnemyLoc(벡터) : Enemy 의 위치를 담을 변수
이제 조금 더 먼 거리를 빠르게 Dash 하는 BTT 를 만들어 볼겁니다. AI 폴더에 BTT 를 생성하고, 이름은 Dash 로 합시다.
변수를 하나 만들어줍시다.
- PlayerLoc(벡터) : Player 의 위치를 담을 변수
- 여태까지는 생성된 Montage 를 썼지만, 이제는 생성해주어야 합니다. 간단하니 걱정마세요!
- 기존 애니메이션 이름에 _Montage 가 붙게됩니다.
- 이제 준비는 끝났습니다. Dash BTT 를 다시 열어줍시다.
세부적인 부분 잘 확인하며 따라와주시기 바랍니다.
Play Anim Montage 노드의 Anim Montage 에셋 이름은 왼쪽부터 각각 'TravelMode_Start_Montage', 'Ability_Q_Montage' 입니다.
Dash 를 추가한 것 이외에 Decorator 부분의 조건도 조금씩 바뀌었으니 참고하여 수정해주시기 바랍니다.
이제 또 플레이해보면, Montage 가 정상 작동하지 않는 모습을 보실 수 있습니다.
- 보편적인 상황은 아니지만, Default Slot 을 하나 더 추가해주어야 합니다. EnemyAnimBP 의 AnimGraph 로 갑시다.
- 다시 플레이해봅시다.
조금 뜬금없을 수도 있지만, Effect 와 Material 등을 사용하기 위해 Paragon 에셋을 하나 더 임포트해줄 겁니다.
에픽 게임즈 런처 - 상단의 '마켓플레이스' - 'Paragon' 검색 - 'Paragon:Revenant' 다운로드 및 프로젝트에 추가해줍시다.
다음 링크에 Blade.fbx 파일을 업로드해두었습니다. 바탕화면에 다운로드 해주세요!
바탕화면에 다운로드 받은 Blade 파일을 언리얼 내부의 Enemy 폴더로 드래그해줍시다.
- 이런 식으로 드래그하지 않고, 직접 파일 위치 경로를 옮겨줘도 됩니다.
- 생성 후 바로 열어줍시다.
- 스태틱 메시 컴포넌트 (Blade1)
- 스태틱 메시 컴포넌트 (Blade2)
- 화살표 컴포넌트 (Arrow)
- 발사체 이동 컴포넌트 (ProjectileMovement)
위치, 회전, 스케일을 위와 같이 바꿔줍시다.
스태틱 메시는 앞서 다운 받은 Blade_Mesh 로 바꿔주고, 머터리얼은 M_Revenant_GlowEyes 로 바꿔줍시다.
이벤트 그래프로 갑시다.
우선 변수를 2개 만들어 줍시다.
- PlayerLoc(벡터) : Player 의 위치를 담을 변수
- ProjectileLoc(벡터) : Projectile 의 위치를 담을 변수
체크 해제하지 않으면 다음과 같이 뜨는데, 처음 하시는 분들이라면 헷갈릴 수도 있다고 생각하여 첨언하였습니다. 참고로 이 상황에선 Blade 1 혹은 Blade 2를 선택해주시면 됩니다!
- 바로 열어줍시다.
Play Anim Montage 노드의 Anim Montage 에셋 이름은 'Ability_E_Montage' 입니다.
SpawnActor Projectile BP 라는 노드가 보이실겁니다. 저 노드의 원래 이름은 'Spawn Actor from Class' 입니다.
- 입력 부분의 'Class'를 ProjectileBP 로 지정하면 노드의 이름이 바뀌는 구조입니다.
Slash 를 추가하였습니다. 나머지 바뀐 점은 없습니다!
플레이해봅시다.
- PlayerLoc(벡터) : Player 의 위치를 담을 변수
캐릭터 무브먼트는 get character movement 로 가져올 수 있습니다.
'중력 스케일'을 입력 값으로 갖는 Set 노드의 이름은 'set gravity scale' 입니다.
Play Anim Montage 노드의 Anim Montage 에셋 이름은 'Ability_Ultimate_Montage' 입니다.
이제 최종적으로 BT 를 구현해볼겁니다.
앞서, Enemy 와 Player 사이의 거리가 1500보다 크거나 같을 때 Slash 를 하였습니다. 동일한 조건 하에, FlyAttack 도 하게끔 만들고 싶습니다.
- 우리는 0.5의 확률로 Slash, 0.5의 확률로 FlyAttack 을 하도록 하곘습니다.
- RandNum(블랙보드 키 선택 툴) : 블랙 보드에 있는 키를 연결하기 위한 변수입니다. 키에 Int 값을 전달합니다. (0 또는 1)
- 이제 이벤트 그래프를 채워봅시다!
- 타입은 인티저, 이름은 RandNum 이라고 해줍시다.
- SelfActor 로 설정되어 있을겁니다.
Decorator 설정에 유의해주셨으면 좋겠습니다. 꼼꼼히 따라해보세요~
이렇게 BT 가 완성되었습니다. 한 번 플레이해봅시다!
조건에 따라 잘 행동하는군요~ 좋습니다!
여기까지 2주차 Part.2 - AI Application 이었습니다. 다음 포스팅은 3주차 Part.1 - VFX 입니다~