목표
AI Character가 F 키를 누르면 걷기 시작하고, G 키를 누르면 달리기 시작한다
AI Character 가 미리 지정된 지점을 향하여 이동할 때 F 키를 누르면 걷기 시작하고 이어서 G 키를 누르면 달리기 시작한다
Animation Blueprint 를 사용하여 State Machine 을 작성하여 상태에 따라서 적절한 애니메이션이 적용되도록 할 수 있다
ThirdPersonCharacter를 복제하여 AI Character로 사용한다
AIController를 기반으로 한 BP_AIController 블루프린트를 생성하여 AI Character를 제어하도록 등록한다
BP_AIController의 이벤트 그래프에 AI Character를 제어하는 내용을 작성한다
1. 공백 블루프린트 프로젝트를 생성한다
2. 컨텐츠 브라우저의 [신규추가] 버튼을 누르고 [피쳐 및 컨텐츠 팩 추가] 를 선택 > 3인칭 선택 > 프로젝트에 추가를 선택한다. 이렇게 하면 ThirdPersonCharacter가 컨텐츠 브라우저에 포함된다
3. ThirdPersonCharacter를 복제하여 원하는 작업용 폴더에 이동하고 이름을 AI_Character으로 변경한다
4. AI_Character 클래스를 열고 카메라와 붐을 제거한다
5. AIController를 기반으로 BP_AIController 블루프린트를 생성하고 AI_Character의 AI Controller Class에 등록한다
언리얼에서 애니메이션은 Skeleton에 설정하는 것이므로 AI_Character의 Mesh를 선택하고 [디테일] 뷰의 Skeleton 항목에서 마우스를 올리고 Skeletal Mesh가 저장된 경로를 확인한다. 아래의 그림에서는 SK_Mannequin 인 것을 알 수 있다
위에서 확인된 Skeletal Mesh의 경로를 컨텐츠 브라우저에서 찾아서 해당 파일 위에 마우스를 올려보면 Skeletal Mesh의 Skeleton 경로를 확인할 수 있다. 아래의 그림에서는 Skeleton 이 UE4_Mannequin 인 것을 알 수 있다
위에서 확인된 바는 우리가 ThirdPersonCharacter를 복제하여 AI_Character를 생성했는데, 해당 캐릭터의 Skeleton은 UE4_Mannequin이라는 사실이다. 언리얼에서 애니메이션을 적용하려면 Skeleton을 타겟으로 설정하여 애니메이션을 설정하므로 우리가 복제한 캐릭터에게 애니메이션을 설정하려면 타겟 Skeleton은 UE4_Mannequin 으로 지정해야 한다는 것이다
6. 컨텐츠 브라우저에서 마우스 우측 > 애니메이션 > Animation Blueprint 선택하고 다음과 같이 설정하고 이름을 AI_AnimBP 으로 입력한다
생성된 AI_AnimBP를 더블클릭하여 열고 애님 그래프에 아래처럼 StateMachine을 추가한다
StateMachine 노드의 이름을 AI State 으로 변경하고 더블클릭하여 다음과 같이 상태를 추가하고 상태 사이를 연결한다
위의 그림에서 보여지는 각 상태 노드에 해당 애니메이션을 드래그하여 설정한다
위의 상태 연결 구조를 약간 변경하여 아래와 같이 삼각형 구조가 되도록 한다
이제 각 상태의 전환규칙(Transition Rule)을 설정할 순서이다. 각 상태 사이에 있는 원형 이이콘을 더블클릭하여 전환규칙을 작성할 수 있다. 키보드에서 I, F, G 키가 눌릴 때마다 Idle, Walk, Run 상태로 전환되도록 할 것이므로 키보드의 눌림에 따라서 값이 변경되는 String 변수를 하나 선언하고 그 값에 따라서 애니메이션이 반응하도록 한다
다음 그림과 같이 String 변수 AnimState 를 선언한다. 이렇게 애니메이션 블루프린트에 선언된 변수는 애님 그래프와 이벤트 그래프에서 공히 사용할 수 있다.
위에서 선언한 변수의 값은 BP_AIController에서 선언된 변수의 값을 참조할 예정이므로 먼저 BP_AIController의 이벤트 그래프에 아래처럼 변수를 선언하고 I, F, G 키가 눌릴 때마다 AnimState변수의 값이 변경되도록 한다. 또한 [디테일]뷰의 Input 항목에서 Disabled 대신에 Player0 으로 설정해야 한다
위처럼 Pawn 클래스나 콘트롤러 클래스에 선언된 변수는 애니메이션 블루프린트에서 쉽게 접근할 수 있는 방법이 제공된다
다시 애니메이션 블루프린트로 돌아와서 블루프린트의 변수 AnimState 에 값을 설정하는 로직을 이벤트 그래프에 다음과 같이 작성한다.
위의 절차를 마치면 BP_AIController에서 변경된 AnimState 변수의 값은 애니메이션 블루프린트의 AnimState 변수에 까지 전달된다. 이제 AnimState 변수의 값을 애니메이션 전환규칙에서 참조하여 전환을 결정하면 된다
Idle, Walk 상태의 전환규칙 아이콘을 더블클릭하고 다음과 같이 전환규칙을 작성한다
다른 모든 전환규칙도 위와같은 방법으로 설정하면 된다 달라지는 것은 Idle, Walk, Run과 같은 문자열이다
위와같은 절차를 통해 완성된 애니메이션 블루프린트는 Skeleton이 아닌 Skeletal Mesh에 설정해야 한다. 애니메이션 블루프린트를 생성할 때의 타겟은 Skeleton이었지만, 완성된 애니메이션 블루프린트를 적용할 대상은 Skeletal Mesh인 것이다
AI_Character 를 열고 Mesh 컴포넌트를 선택한 상태에서 우츠 [디테일] 뷰의 Animation 패널에서 다음 그림처럼 설정한다. 위에서 생성한 AI_AnimBP를 Skeletal Mesh에 설정하는 것이다
뷰포트에 Target Point 액터를 배치한다
뷰포트의 플로어에 Nav Mesh Bound Volumn을 설정한다
AI_Character 를 컨텐츠 브라우저에서 드래그하여 뷰포트의 적당한 위치에 놓고 바라보는 방향을 조정한다
BP_AIController의 이벤트 그래프를 최종적으로 아래처럼 작성한다. 걷기와 달리기 애니메이션이 실행될 때는 캐릭터의 이동 속도도 달라져야 하므로 CharacterMovement 컴포넌트를 활용하여 캐릭터의 이동속도를 달리 설정한 내용이다
게임을 실행하고 I, F, G 키를 누를 때마다 AI_Character가 TargetPoint 를 향하여 이동하면서 다른 애니메이션이 실행되고 이동 속도도 달라지는 것을 확인할 수 있다
F키를 누르면 걷는 애니메이션과 느린 속도(200)가 확인된다
G키를 누르면 달리는 애니메이션과 빠른 속도(400)가 확인된다