언리얼 엔진에서 휴머노이드 캐릭터간의 애니메이션 Retargeting


스켈레탈 애니메이션은 뼈대를 기반으로 하는 애니메이션이므로 원칙적으로 서로다른 골격구조를 가진 캐릭터의 애니메이션은 서로 교환하여 사용할 수가 없다. 

언리얼 엔진에서는 Animation Retargeting 이라는 방법을 사용하여 휴머노이드 캐릭터 간에는 골격구조가 서로 다르더라도 Rig 애셋을 통하여 애니메이션을 서로 교환하여 사용할 수 있다

언리얼 엔진은 두 캐릭터 간에 서로 뼈대정보를 공유하기 위해 새로운 애셋인 휴머노이드 Rig 애셋을 생성하여 사용하는 방법을 제공한다


여기서는 mixamo 사이트에서 다운로드한 캐릭터와 애니메이션을 언리얼 프로젝트로 임포트하여 언리얼 엔진에서 제공하는 마네킹 캐릭터에 사용되는 애니메이션을 mixamo 에서 가져온 캐릭터에 적용하는 절차에 대해 알아 보고자 한다. 

mixamo.com 사이트에서 캐릭터와 애니메이션을 다운로드하고 언리얼 프로젝트로 임포트하는 방법은 다음 링크를 눌러 참조하면 된다

https://unrealengine.tistory.com/category/Skeletal%20Animation/Mixamo%20Character



설정 절차 ( 마네킹 캐릭터의 애니메이션을 mixamo 캐릭터에게 설정하는 예)

Skeleton Asset 더블클릭하여 에디터 열기


1. 소스 스켈레톤에 Rig 애셋 생성하기

Content Browser에서 마네킹 스켈레톤을 더블클릭하여 페르소나 에디터를 열고 

툴바 > Retarget Manager > Select Rig: Select Humanoid Rig   

위와 같이 선택하면 자동으로 Rig 이름과 뼈의 이름이 서로 나란히 매칭된 표가 표시된다  언리얼 캐릭터의 경우에는 자동 매핑이 문제 없지만 외부에서 임포트한 다른 스켈레톤에는 적절치 않는 매핑이 될 수 있으므로 자동으로 설정하더라도 반드시 모든 본이 적절히 설정되었는지 확인해야 한다


2. 소스 Rig 애셋 저장

스켈레톤 에디터의 툴바에서 Save 버튼을 눌러 생성된 휴머노이드 Rig애셋 정보를 저장한다

설정된 Rig 정보를 별도의 파일에 저장하려면 중간에 있는 [저장] 버튼을 누르면 된다. 저장된 매핑 정보는 다음에 동일한 작업을 할 때 일일이 설정하는 것이 아니라 [로드] 버튼을 눌러 적용하면 된다


3. 타겟 스켈레톤에 Rig 애셋 생성

타겟 스켈레톤을 더블클릭하여 페르소나 에디터를 열고 소스 스켈레톤에 설정했던 Rig 애셋을 동일한 방법으로 설정한다. 모든 본에 대응하는 타겟 본의 이름을 정확히 지정해야 한다. 위와 마찬가지로 작성된 릭애셋을 저장해두면 동일한 작업을 반복할 때 로드하여 사용할 수 있다

 

4. 소스 애니메이션 리타겟 및 애니메이션 생성

사용하고자 하는 소스 애니메이션 위에서 마우스 우측 > Retarget Anim Assets > Duplicate Anim Assets and Retarget


5. Select Skeleton(타겟 스켈레톤 선택)

새로 나타난 창의 왼쪽에는 소스 스켈레톤의 기본 포즈가 표시되어 있고 우측 Target 영역은 아직 비어 있는 상태이다

왼쪽 중간 쯤에 표시된 새로운 스켈레톤 이름을 선택하면 우측에 Target 영역에 해당 스켈레톤의 기본 포즈가 표시된다

소스 스켈레톤의 기본포즈와 타겟 스켈레톤의 기본포즈가 서로 일치하는지 확인한다

기본포즈가 서로 일치하지 않으면 애니메이션에도 영향을 미치게 되므로 팔을 벌린 정도나 다리를 벌린 정도, 팔의 전후 위치 등을 비교하여 소스 스켈레톤의 자세를 변경해 주면 된다


6. 소스 스켈레톤의 기본포즈 수정

언리얼 엔진에 포함된 마네킹 캐릭터의 기본포즈는 A 자형인데 mixamo 에서 임포트한 캐릭터는 T 자형 포즈를 기본으로 하고 있으므로 리타겟팅을 수행하기 전에 양 캐릭터의 기본 자세를 최대한 동일하게 설정해 주어야 애니메이션이 정상적으로 작동한다.

스켈레톤 에디터를 열고 왼쪽의 Select Bone 탭에서 수정하고자 하는 뼈를 찾아 선택한다

뷰포트의 편집툴에서 회전툴 등을 이용하여 본을 회전하여 타겟 스켈레톤의 기본포즈와 같이 설정한다

타겟 매니저 화면의 하단에 있는 [자세변경] 버튼을 누르고 [현재자세 사용] 버튼을 누른다. [자세 보이기] 버튼을 누르면 다시 원래의 기본자세가 표시되고 [자세 감추기] 버튼을 누르면 수정된 자세가 표시된다


4번 항목을 다시 수행하고 창의 하단에 있는 Select 버튼을 누르면 새로운 애니메이션이 생성된다


7. 위에서 생성된 애니메이션을 타겟 캐릭터에 설정하기

언리얼 3인칭 프로젝트에서 뷰포트 상의 마네킹을 선택하고 우측 [디테일] 섹션의 [블루프린트 편집] 버튼을 누르고 에디터의 왼쪽 [컴포턴트 추가] 섹션에서 Mesh 노드를 선택하면 우측 [디테일] 섹션의 Mesh 항목 설정에서 메시를 설정하면 마네킹 캐릭터 대신에 mixamo 등의 외부에서 임포트한 캐릭터를 설정할 수 있다

애니메이션 섹션에서는 위에서 생성한 애니메이션을 설정하고 저장한다

애니메이션 블루프린트를 생성하여 위의 애니메이션을 사용할 수도 있다


8. 플레이 버튼을 눌러 적용된 캐릭터와 애니메이션이 잘 작동하는지 확인한다


Unreal - Mixamo Bone Mapping ( Humunoid Rig)

 

 root

 None

 pelvis   Hips 
 spine_01  Spine 
 spine_02  Spine1 
 spine_03  Spine2 
 neck_01 Neck 
 head  Head
 clavicle_l  LeftShoulder
 upperarm_l  LeftArm
 lowerarm_l  LeftForeArm
 hand_l  LeftHand
 clavicle_r  RightShoulder
 upperarm_r  RightArm
 lowerarm_r  RightForeArm
 hand_r  RightHand
 thigh_l  LeftUpLeg
 calf_l  LeftLeg
 foot_l LeftFoot
 ball_l  LeftToeBase
 thigh_r  RightUpLeg
 calf_r RightLeg
 foot_r  RightFoot
 ball_r  RightToeBase
 thumb_01_l   LeftHandThumb1
 thumb_02_l   LeftHandThumb2
 thumb_03_l LeftHandThumb3
 index_01_l   LeftHandIndex1
 index_02_l   LeftHandIndex2
 index_03_l   LeftHandIndex3
 middle_01_l LeftHandMiddle1
 middle_02_l   LeftHandMiddle2
 middle_03_l   LeftHandMiddle3
 ring_01_l   LeftHandRing1
 ring_02_l LeftHandRing2
 ring_03_l   LeftHandRing3
 pinky_01_l   LeftHandPinky1
 pinky_02_l   LeftHandPinky2
 pinky_03_l   LeftHandPinky3
 thumb_01_r   RightHandThumb1
 thumb_02_r   RightHandThumb2
 thumb_03_r   RightHandThumb3
 index_01_r   RightHandIndex1
 index_02_r   RightHandIndex2
 index_03_r   RightHandIndex3
 middle_01_r   RightHandMiddle1
 middle_02_r   RightHandMiddle2
 middle_03_r   RightHandMiddle3
 ring_01_r   RightHandRing1
 ring_02_r   RightHandRing2
 ring_03_r   RightHandRing3
 pinky_01_r   RightHandPinky1
 pinky_02_r RightHandPinky2
 pinky_03_r   RightHandPinky3


Posted by cwisky

AI 캐릭터가 옆으로 빠르게 이동하면서 사격을 하는 내용의 블루프린트


총알은 First Person Projectile을 사용함

총알이 발사되는 시작 위치를 참조하기 위해 아래 그림처럼 캐릭터 앞에 Arrow 콤포넌트를 두고 콤포넌트 계층구조상 Mesh콤포넌트 하위에 배치했기 때문에 블루프린트에서 총알을 발사할 때는 언제든지 화살표의 위치를 참조하여 총알이 스폰되는 위치로 삼을 수 있다



AI Character의 이벤트 그래프






Enum_Game_State



BP_EnemyAnim  (애니메이션 블루프린트의 이벤트 그래프)


BP_EnemyAnim  (애니메이션 블루프린트의 애님 그래프)


Posted by cwisky

애니메이션 블루프린트를 사용하면 State Machine을 활용하여 상태에 따른 애니메이션을 실행할 수 있고 각 상태 간의 전환 규칙도 간편하게 작성 및 관리할 수가 있다. Play Animation 노드를 사용할 때 보다 자연스러운 애니메이션이 가능하고 로직으로부터 애니메이션 관리기능을 분리할 수 있는 장점을 갖는다


애니메이션 블루프린트를 생성하고 사용하는 절차는 다음과 같다

Animation Blueprint 생성

Animation Blueprint를 생성하고 State Machine을 사용하여 상태에 따른 애니메이션을 지정하고 상태간의 전환규칙(Transition Rules)을 정의한다


캐릭터 클래스 생성 ( Character를 상속한 클래스 블루프린트 생성 )

Character 클래스를 상속하여 클래스 블루프린트를 생성하고 컴포넌트 패널의 Mesh 컴포넌트로 애니메이션이 속한 스켈레탈 메시(Skeletal Mesh)를 선택한다


캐릭터 클래스에 애니메이션 블루프린트 적용

캐릭터 클래스의 Mesh 컴포넌트를 선택하고 우측 [디테일] 뷰 / Animation / Animation Mode : Use Animation Blueprint 선택


캐릭터 클래스를 CB에서 뷰포트로 드래그하고 실행


1. Animation Blueprint 생성

CB에서 마우스 우측 > 애니메이션 > 애니메이션 블루프린트 > 설정창이 뜬다

부모 클래스 : AnimInstance

타겟 스켈레톤 : 애니메이션이 속한 스켈레톤을 선택


애님그래프 탭을 누르고 그래프 바탕에서 마우스 우측을 눌러 [스테이트머신 추가]를 선택하여 스테이트 머신을 생성하고 디폴트로 생성된 [Result] 노드와 연결해준다


생성된 스테이트 머신을 더블클릭하고 [Entry] 노드에서 드래그하여 놓고 새로운 상태를 생성하고 각 상태를 더블클릭하여 실행할 애니메이션을 우측 [Browse Assets] 패널에서 드래그하여 지정한다. 혹은 애니메이션을 드래그하여 상태 노드위에 놓으면 자동으로 애니메이션이 연결된다




애니메이션 노드를 선택하고 우측 [디테일]뷰에서 Loop Animation 항목에 체크 여부를 고려한다




상태 간의 전환규칙(Transition Rules)을 정의한다

상태 간의 전환규칙은 캐릭터의 상태에 따르는 경우가 대부분이므로 캐릭터의 참조를 구하고 캐릭터 클래스의 상태관련 변수의 값을 참조하여 애니메이션 상태 전환의 기준으로 사용하면 된다




이벤트 그래프 탭을 누르고 캐릭터의 참조를 구하고 캐릭터 클래스의 상태 변수 값을 애니메이션 블루프린트 클래스의 변수 값에 할당한다. 이 값은 각 상태의 전환규칙을 정의할 때 사용될 수 있다


주의 : Animation Blueprint 에서는 Get AI Controller 노드가 제대로 작동하지 않으므로 콘트롤러를 구하려면 Try Get Pawn Owner -> Get Controller 방법을 사용해야 한다

아래의 예에서는 Try Get Pawn Owner 노드를 사용하여 애니메이션이 적용되는 Pawn 의 참조를 구하고 있다




2. 캐릭터 클래스 생성

애니메이션이 속한 스켈레톤을 메시 컴포넌트로 포함하는 클래스 블루프린트를 생성한다. 이 때 부모 클래스를 Character으로 지정한다

스켈레톤에 소켓을 추가하면 스켈레탈 메시를 포함하는 클래스 블루프린트에서 소켓에 무기 등을 연결해 줄 수 있다.

[디테일] 뷰 / Mesh / Skeletal Mesh : 애니메이션이 속한 스켈레탈 메시 지정

[디테일] 뷰 / Animation / Animation Mode : Use Animation Blueprint 선택

Anim Class : 위에서 작성된 애니메이션 블루프린트 이름을 선택


혹은 캐릭터 클래스를 새로 생성하지 않고 ThirdPersonCharacter 캐릭터를 복제하여 [디테일]뷰/Animation/Animation Mode : Use Animation Blueprint, 와 Anim Class : 애니메이션 블루프린트 이름을 선택하면 된다


커스텀 캐릭터가 사용되기 위해서는 언리얼 레벨 에디터의 [디테일]뷰/GameMode/Default Pawn Class에 등록해야 한다


이렇게 설정하면 현재 캐릭터 클래스에서는 지정한 애니메이션 블루프린트가 사용된다




캐릭터 클래스의 [이벤트 그래프]에는 다음과 같이 애니메이션 블루프린트와 통신하기 위한 상태변수(CurrState)가 선언되어 캐릭터의 상태를 애니메이션 블루프린트에 전달하는 역할을 하게 된다. 여기서는 캐릭터의 CurrState 변수의 값을 애니메이션 블루프린트의 [이벤트 그래프] 탭에 작성된 내용에서 참조하고 있다 그러므로 캐릭터 클래스에서는 애니메이션을 직접 호출하거나 실행하는 것이 아니라 상태변수의 값만 변경해주면 현재 캐릭터에 등록된 애니메이션 블루프린트에서 자동으로 상태 값을 확인하여 상태에 연결된 애니메이션이 실행되는 구조이다



AI 캐릭터가 총에 맞았을 때 쓰러지는 애니메이션을 실행하는 경우


AI 캐릭터가 총소리를 들었을 때 그 방향으로 돌아서는 경우


위에서 사용된 TimeLine 노드의 그래프




3. 캐릭터 클래스를 CB로부터 뷰포트에 드래그하 놓고 게임을 실행하여 상태전한에 따른 각 애니메이션이 적절히 실행되는지 확인한다




Posted by cwisky

언리얼 엔진에서 Pawn Noise Emitter 컴포넌트의 Make Noise 노드를 사용하면 AI 캐릭터가 Pawn Sensing 컴포넌트의 On Hear Noise 이벤트를 이용하여 반응하게 할 수 있다


노이즈 생성 ( 일인칭 캐릭터의 블루프린트 )



위의 Loudness 값은 0.0 ~ 1.0 사이의 값으로 AI Pawn Sensing 컴포넌트의 HearingThreshold.속성으로 설정된 영역에 직접적으로 영향을 미친다. 즉 Loudness를 1.0으로 한다면 On Hear Noise 이벤트에 전달되는 Volumn 값도 1.0이라는 의미이다. 단, AI의 HearingThreshold로 지정한 영역 내에만 적용된다


노이즈 청취 ( AI 캐릭터의 블루프린트 )



AI 캐릭터가 소리가 나는 방향으로 자세를 회전하는 예


Posted by cwisky

이전 내용보기


앞장에서 작성된 내용에 Pawn Sensing을 추가하여 AI 적 캐릭터가 플레이어 캐릭터를 발견하면 총을 들고 달려 오다가 플레이어가 총을 쏘아 명중하면 쓰러지는 내용으로 애니메이션을 테스트하려고 한다. 애니메이션을 실행할 때는 블루프린트 Play Animation 노드를사용할 것이다


여기서도 앞장과 마찬가지로 Animation Starter Pack에 포함된 애니메이션을 사용할 것이고 스켈레탈 메시를 참조하는 클래스 블루프린트는 앞장에서 사용했던 BP_Enemy_AI 를 사용한다


사용된 Skeletal Mesh는 Animation Starter Pack에 포함되어 있는 SK_Mannequin 이므로 Animation Starter Pack에 포함된 모든 애니메이션을 BP_Enemy_AI 블루프린트에서 Play Animation 노드를 통해 실행할 수 있다.


컴포넌트 패널의 [컴포넌트 추가] 버튼을 누르고 Pawn Sensing을 검색하여 컴포넌트로 추가하고 우측 [디테일] 뷰에서 시야의 각도와 시야의 반경을 적절히 설정한다


컴포넌트 패널에서 Pawn Sensing 컴포넌트를 선택하고 [이벤트 그래프] 바탕에서 마우스 우측을 누르고 On See Pawn 이벤트 노드를 추가하고 아래와 같은 내용을 작성한다. 그 외에 BeginPlay 이벤트와 OnComponentHit 이벤트도 작성한다


아래의 내용은 AI 캐릭터가 총을 들고 서 있다가 플레이어 캐릭터를 발견하면 달려 오다가 플레이어가 총을 쏘아 명중하면 AI 캐릭터가 쓰러지는 내용이다


AI 캐릭터가 활동하기 위해서는 Floor에 Nav Mesh Bound Volumn 도 설정해주는 것을 잊지 않아야 한다




Posted by cwisky

언리얼 엔진의 Skeleton 에 Socket을 추가하고 Skeletal Mesh를 참조하는 클래스 블루프린트에서 Socket에 총 모델을 연결하기


이전의 내용을 이해한 후에 여기를 참조해야 제대로 이해할 수 있습니다

이전의 내용 보기


특정 Skeleton을 이용하여 생성된 기본 캐릭터 모델(Skeletal Mesh)이 있고 그 모델에 다른 모델을 부착하려는 경우에는 Socket을 Skeleton에 추가해야 한다. 추가된 소켓에 무기나 다른 모델을 부착하려면 해당 메시를 참조하는 블루프린트에서 컴포넌트를 추가하는 방법을 사용할 수 있다.


여기서는 앞장에서 생성한 블루프린트를 사용하여 그 안에서 참조하는 Skeletal Mesh에 소총 모델을 부착하여 애니메이션과 함께 움직이도록 설정하려고 한다


준비물

Skeleton : Animation Starter Pack에 포함되어 있는 UE4_Mannequin_Skeleton

Skeletal Mesh : Animation Starter Pack에 포함되어 있는 SK_Mannequin

클래스 블루프린트 : 앞장에서 생성된 스켈레탈 메시를 참조하는 클래스 블루프린트

소총 모델 : free3d.com 등에서 배포하는 무료 모델 

fbx.zip



Skeleton파일을 찾아 더블클릭하여 페르소나 에디터를 연다

사용할 Skeleton파일이 저자된 곳은 다음과 같다

콘텐츠/AnimStarterPack/UE4_Mannequin/Mesh/UE4_Mannequin_Skeleton

스켈레톤 파일을 더블클릭하여 페르소나 에디터를 열고 아래의 그림과 같이 소켓을 추가한다. 아래의 그림에서는 왼손의 뼈에 해당하는 hand_l 에 소켓을 추가하고 있다


소켓의 이름은 자동으로 본의 이름을 따서 [hand_l소켓]으로 붙여진다

툴바에서 [저장] 버튼을 누르고 에디터를 닫는다


앞장에서 생성한 BP_Enemy_AI 클래스 블루프린트를 더블클릭하여 연다. 이 클래스는 위에서 소켓이 추가된 바로 그 Skeleton을 적용한 Skeletal Mesh의 참조를 사용하고 있으므로 소켓에 접속할 수가 있다


CB에서 소총 모델을 드래그하여 컴포넌트 패널에 있는 Mesh의 하위 컴포넌트가 되도록 놓고 우측 [디테일] 뷰 / 소켓 / 부모소켓 : [hand_l소켓] 으로 설정한다. 이 때 중요한 점은 소켓이 추가된 Mesh의 하위 컴포넌트가 되도록 설정해야 한다는 것이다. 그래야만 부모 소켓 항목에서 소켓을 선택할 수 있게 된다


추가된 소총모델을 선택하고 우측 [디테일] 뷰 /트랜스폼/ 에서 위치를 0, 0, 0 으로 설정하면 부모소켓의 위치에 소총모델이 위치하게 된다. 소총의 크기가 캐릭터에 비해서 너무 작기 때문에 스케일 툴을 이용하여 크기를 조정하고 소총모델을 회전하여 총구가 앞으로 오도록 설정한다. 이때 에디터 뷰포트에서 애니메이션이 실행 중이면 소총의 위치를 설정하기가 어려우므로 컴포넌트 패널에서 Mesh를 선택하고 우측 [디테일] 뷰 / Animation / Pause Anims 를 선택하여 애니메이션을 일시중지하고 소총의 위치를 설정한 다음에 Pause Anims 선택을 해제하면 된다. 실수로 Pause Anims를 선택한 상태로 게임을 실행하면 애니메이션이 실행되지 않는다

위와 같이 설정하고 Pause Anims 선택을 해제하면 뷰포트 상에서 지정된 애니메이션이 실행될 때 캐릭터의 움직임을 따라서 소총도 자연스럽게 따라 움직이는 것을 확인할 수 있다


캐릭터의 자세를 따라 소총이 따라서 움직이는지 확인하기 위해서 [이벤트 그래프]에 다음과 같은 간단한 내용으로 테스트해 본다. 적용해본 애니메이션은 Fire_Rifle_Ironsights 으로 견착사격하는 애니메이션이다


위의 내용을 [저장] [컴파일] 후에 게임을 실행해 보면 다음과 같이 캐릭터의 자세의 변화에 따라 소켓에 연결된 소총도 제대로 따르는 것을 확인할 수 있다



Posted by cwisky

스켈레탈 애니메이션(Skeletal Animation)은 관절체로 구성된 오브젝트의 움직임을 표현한 애니메이션을 말한다 언리얼 엔진에서 스켈레탈 애니메이션은 스켈레톤(Skeleton)에 등록되며 스켈레톤의 참조를 이용하면 해당 스켈레톤에 등록된 많은 애니메이션 중에서 상황에 따라서 특정 애니메이션을 선택하여 사용할 수 있다. 그러므로 스켈레탈 애니메이션을 화면에 보여주려면 반드시 스켈레톤(Skeleton)이 있어야 하며 캐릭터의 외형을 나타내는 스켈레탈 메시(Skeletal Mesh)도 반드시 필요하다 Skeleton은 뼈의 계층구조에 대한 정보만 있고 오브젝트를 표현하는 메시 정보는 가지고 있지 않다. Skeletal Mesh는 Skeleton(뼈의 계층구조 정보)을 적용하여 생성한 3D 메시를 말한다


언리얼 엔진을 설치하고 일인칭, 삼인칭 템플릿을 이용하여 프로젝트를 생성하면 엔진에서 제공하는 Skeleton, Skeletal Mesh 와 해당 스켈레탈 메시를 사용해서 만들어진 몇가지 스켈레탈 애니메이션이 제공된다.  


블루프린트에서 스켈레탈 애니메이션을 화면에 출력하는 방법은 Play Animation 노드를 사용하는 것이 기본이다. 단순히 적절한 상황에서 특정 애니메이션을 보여주기만 한다면 그 이상의 수단은 필요 없을 것이다. 그러나 몇가지 애니메이션이 자연스럽게 연결되도록 보간(Interpolation)하는 방법을 제공하는 Blend Spaces 라는 수단도 있고 State Machine 을 사용하여 상태에 따라 다른 애니메이션을 선택하여 보여 줄 수도 있다. 또 Animation Montage를 이용하여 2가지 애니메이션을 동시에 실행하도록 혼합할 수도 있다


모든 스켈레탈 애니메이션의 실행을 위해서는 해당 스켈레텔 메시가 반드시 필요하며 Character를 상속한 클래스 블루프린트를 생성하고 Mesh 컴포넌트를 원하는 스켈레탈 메시로 지정해 주면 블루프린트 안에서 Mesh의 참조를 구할 수 있으므로 해당 Mesh에 등록된 모든 스켈레탈 애니메이션을 불러서 실행할 수가 있다.


여기서는 위에서 언급한 대로 Character를 상속한 클래스 블루프린트를 생성하고 Mesh 컴포넌트에 Animation Starter Pack에서 제공하는 SK_Skeleton 메시를 지정하는 방법에 대해서 알아본다


Animation Starter Pack을 다운로드 및 임포트했다면 콘텐츠 / AnimStarterPack / UE4_Mannequin / Mesh / 안에서 스켈레톤(UE4_Mannequin_Skeleton)과 스켈레탈 메시(SK_Mannequin)를 찾을 수 있다

Animation Starter Pack에 포함된 많은 애니메이션은 콘텐츠/AnimStarterPack 안에서 찾을 수 있다


일인칭 템플릿을 사용하여 새로운 프로젝트를 생성하고 [월드 세팅] / Game Mode / Game Mode Override : FirstPersonGameMode, Default Pawn Class : FirstPersonCharacter 으로 설정한다


CB의 적당한 폴더에서 마우스 우측 > 블루프린트 클래스 > 부모 클래스 선택 : Character > 블루프린트 이름: BP_Enemy_AI 등으로 지정


BP_Enemy_AI 를 더블클릭하여 에디터를 연다


에디터 왼쪽 컴포넌트 패널에서 Mesh 선택, 우측 [디테일] 뷰 / Mesh / Skeletal Mesh 항목에 Game/ AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin 선택

그 위에 있는 Animation / Animation Mode : Use Animation Asset 선택, Anim to Play : Idle_Rifle_Hip 선택, 툴바에서 [저장], [컴파일]


위와같이 설정하면 지정된 애니메이션이 뷰포트에서도 실행되고 있는 것을 확인할 수 있다


뷰포트 상의 캐릭터가 Capsule Component 의 위치와 일치하도록 캐릭터를 이동툴로 내려서 조정하고 캐릭터가 X축을 향하도록 회전툴을 사용하여 90도 회전한다


아래처럼 이미 AI Controller Class 항목에 AIController으로 설정된 상태이기 때문에 이 클래스에서는 AI 기능(Pawn Sensing, AI Move To 등)을 사용할 수가 있다.


컴포넌트 패널에서 CapsuleComponent 를 선택하고 우측 [디테일] 뷰 / Collision / 콜리전프리셋 : BlockAll 으로 설정

이벤트 항목에서 OnComponent Hit 의 초록색 버튼을 누른다


이벤트 그래프를 다음과 같이 작성한다. 캐릭터가 발사체(FirstPersonProjectile)를 맞으면 죽는 것처럼 쓰러지는 애님메이션(Death_Ironsights_1)이 실행되는 내용이다


지금까지 작성된 BP_Enem_AI 블루프린트를 CB에서 드래그하여 뷰포트에 배치하고 게임을 실행한 후 일인칭 캐릭터가 총을 조준하여 발사하도록 마우스 왼쪽 버튼을 누르면 적 캐릭터에 명중하면 쓰러지는 애니메이션이 실행되는 것을 확인할 수 있다



Posted by cwisky

Animation Blueprint에서 다른 액터의 참조 구하는 예




BP_Event 클래스의 내용


Posted by cwisky

BlendSpace는 다수개의 애니메이션이 부드럽게 연결되어 실행될 수 있도록 설정하는 파일이며 언리얼 엔진은 BlendSpace에 설정된 다수개의 애니메이션 사이에 보간법(Interpolation)을 적용하여 자연스럽게 연결되도록 한다


Idle, Walk, Run 애니메이션을 속도를 기반으로 배치 연결하여 임의의 속도에서의 애니메이션 구현하기

예를 들어, 속도를 기반으로 하여 다수개의 애니메이션을 연결한 경우, 중간속도 구간에서는 언리얼 엔진에 의해 보간된 애니메이션이 자동으로 지원된다.


CB에서 마우스 우측 > 애니메이션 > Blend Space > 파일 이름을 BS_Idle_Walk_Run 등으로 입력

생성된 Blend Space를 더블클릭하여 페르소나 에디터를 열고 다음과 같이 설정한다


Idle, Walk, Run 애니메이션을 연결할 때 속도에 따라 나열하면 중간 구간에서는 언리얼 엔진에 의해 보간된 애니메이션이 지원된다. 하단 그래프의 초록색 점을 마우스로 상하로 이동하면 보간된 애니메이션을 미리 확인할 수 있다



State Machine에 Blend Space를 설정하기

Animation Blueprint를 작성하고 State Machine 을 생성하고 특정 상태에 위에서 작성된 Blend Space파일을 드래그하면 된다



스테이트 머신 안에 포함된 특정 스테이트 안에 Blend Space를 설정한 예

속도 기반으로 3개의 애니메이션을 연결했기 때문에 특정 속도를 지정하면 해당 속도대의 애니메이션이 실행된다



속도를 부드럽게 올리거나 내리면서 다양한 속도에 따른 애니메이션을 실행하는 경우

예를 들어, 캐릭터가 정지하고 있다가 걷기 시작하고 이어서 달리는 애니메이션을 화면에 출력하고자 한다면 다음과 같이 Speed 값을 0 ~ 375까지 점차적으로 변경해주면 된다



애니메이션 블루프린트의 이벤트 그래프에서 위에서 사용된 Speed 변수의 값을 점차적으로 증가하거나 감소하면 된다



캐릭터에 애니메이션 블루프린트를 설정한다


Posted by cwisky