캐릭터 임포트
애니메이팅된 캐릭터를 추가하기 위해 캐릭터 에셋을 임포트했다. 임포트할 때, Skeletal Mesh가 있었는데, 이게 Unity에서는 Skinned Mesh이다.
Skeleton을 클릭하니 본 구조가 계층적으로 보였다. 캐릭터와 그에 맞는 본도 나타났다.
Skeletal Mesh에서는 Static Mesh와 비슷하게 Material, LOD, Physics 등 다양한 속성이 있었다.
캐릭터 머티리얼 세팅
베이스 컬러
회색조의 텍스쳐와 색을 오버레이시켜 베이스 컬러에 연결했다. 블렌드를 지원하는구나! 포토샵에서 익숙하게 사용하던 친구들이라 반가웠다.
주황색만 컬러로 있으면 어색하기 때문에 마스크를 사용했다. G 채널을 Alpha 속성과 연결시켜 Lerp로 파란(검정) 쪽은 주황색이, 초록(흰색) 쪽은 회색으로 칠했다.
Metalic, Roughness, Ambient Occlusion
그 다음엔, 이 텍스쳐를 로드해주었다. 이 텍스쳐는 겉보기에는 요상한 텍스쳐 같지만... 사실은 RGB 채널에 각각 다른 요소들을 담고 있다.
사실, 이걸 찍을 때 B 채널만 전부 회색이라 당황스러웠는데, 다시 임포트 해보니 노멀 맵으로 인식을 해서 B 채널이 이상하게 보였던 것이다 ㅠ_ㅠ Revert를 누르고 임포트를 했더니, 제대로 되어서 다행이었다.
임포트 후 각 채널을 속성에 연결시켜주었다!
Normal Map, Emission
노멀맵은 그냥 연결해주었다.
Emissive Color도 연결해주었다. 마스크 텍스쳐의 R 채널에 연한 빛 색을 곱해서 이런 빛들을 표현해주었다. 하얀 색이 (1, 1, 1)이라 특정 색을 곱하면 그대로 나오는 것 같다.
얼굴은 간단하게 Emissive Color에 맞는 텍스쳐를 넣어주었다.
FlipBook
그리고 4x4로 캐릭터의 눈이 그려져있는 텍스쳐를 활용할 것이다.
그래프는 생각보다 쉬웠다!
FlipBook이라는 노드를 활용해 행과 열을 4로 지정해주고 UVs를 연결해주었다. 애니메이션 단계를 정했는데, 나는 13번째가 마음에 들었다. 그래서...
이 수식을 활용하여 웃는 얼굴을 선택했다. 이건 강의에서 알려주지 않았지만, 쉽고 사소하더라도 혼자 해서 뿌듯했다 ^__^
얼굴 또한 잘 나왔다! 캐릭터 머티리얼 세팅 끝~
이동 방향 바라보기
Skeleton Mesh 넣기
전 글에서 만들었던 캡슐 아이의 Mesh를 캐릭터의 Skeleton Mesh로 넣어주었다.
Mesh가 앞을 바라볼 수 있도록 Z축으로 -90도 회전을, 캡슐에 맞도록 Z축으로 이동을 시켜주었다. 캡슐 또한 Radius와 Height를 줄여 캐릭터와 맞도록 설정했다.
... 아무래도 이동 방향을 캐릭터가 바라보는 편이 나을 것 같다.
방향 설정
블루프린트로 들어가 Character Movement 컴포넌트를 선택한 다음, Rotation이라고 검색했다. Orient Rotation To Movement 속성을 체크해준 후 Rotation Rate를 조정해 회전 속도를 올려주었다.
Orient Rotation To Movement는 움직이는 방향으로 회전 방향을 설정해주는 속성이라고 추측된다.
기대했는데, 무슨 사시나무 떨듯 와들와들 떨어버린다... 영상에서 본대로 SpringArm의 Transform을 상대가 아닌 절대 좌표로 변경해주어도, 영상처럼 부드럽게 움직이지 않고 자꾸만 떨렸다...
인터넷에 검색해본 결과, Class Defaults > Pawn > Use Controller Rotation Yaw 체크를 해제하는 것으로 해결할 수 있었다.
카메라도 고정되고 캐릭터도 이동 방향을 잘 향하는 것을 알 수 있다!
애니메이션
에셋 임포트
애니메이션이 있는 FBX 파일을 임포트해주었다. Skeleton은 내가 추가한 캐릭터, Mesh는 이미 있으므로 임포트하지 않았다.
FBX를 클릭하니 애니메이션 에디터가 나타난다. 우측 아래서 각 애니메이션들을 선택할 수 있고 프레임별로 동작을 볼 수 있는 듯하다.
Animation Blueprint
애니메이션을 추가하기 위해 Animation Blueprint를 새로 만들어주었다.
ABP(Animation Blueprint)는 스켈레톤 기반이므로, 캐릭터의 스켈레톤을 넣어주었다.
AnimGraph로 가서 Idle 애니메이션을 드래그해주었다. 유니티와 비슷하게 애니메이션과 트랜지션이 있는 듯하다. 아직은 잘 모르겠지만...
영상을 따라 애니메이션과 Output Pose의 Result를 연결해주었다.
그리고 캐릭터 블루프린트로 돌아가, SkeletalMesh 컴포넌트에 Anim Class를 방금 만든 ABP로 넣어주었다.
미세하지만, Idle 애니메이션이 실행되고 있는 것을 볼 수 있다.
State Machine
그렇지만 캐릭터는 다양한 모션을 번갈아 플레이해주어야 하기 때문에 State Machine을 사용했다.
아까 내가 ABP와 Unity의 Animator과 닮았다고 했지만, 강의롤 보니 StateMachine과 Animator가 조금 더 닮아있는 것 같다. 상태와 트랜지션, 엔트리가 같이 있는 부분이 비슷하다.
State Machine에는 이런 간단한 로직을 구현해주었다.
Idle 상태 안에서는 Idle 애니메이션만을 재생하도록 했다.
Walk/Run 상태 또한 Walk 애니메이션만 갖는다고 한다. 나중에 더 확장한다고 강의해서 말한다. 굳이 Walk와 Run을 같은 상태에 묶은 이유가 무엇일까?
생각해봤을 때, 대기 상태에서 '움직임이 있다면'이라는 조건으로 체크하고 그 다음에 Walk/Run 상태에서 입력이나 속도를 비교해 둘을 나눠줄 것 같다.
이러한 로직으로 가기 위해서는 캐릭터의 순간 속도가 필요하다! Event Graph로 가서 새 변수를 만들고 값을 입력해보았다.
폰의 순간 속도인 Velocity를 가져와 X와 Y의 길이를 Ground Speed로 설정했다. 점프는 아직 없기 때문에 Z 값은 고려하지 않았다. 폰이 유효한 상태일 때만 가지고 Ground Speed를 설정하게끔 했다.
Idle > Walk/Run 트랜지션에 가서는 속도가 0 초과일 때 참이, 반대 트랜지션은 속도가 5 이하이면 참이 되도록 만들었다.
두 애니메이션 모두 루프를 설정해주었더니, 끊기지 않고 잘 걷고 멈춘다!
Blend Space
달리기를 추가하기 위하여 Blend Space 1D를 생성해주었다. Unity의 Blend Tree와 비슷한 걸까.
1D라서 축이 Horizontal밖에 없는 듯했다. 이름을 Speed로, Max를 400으로 해주었다.
애니메이션들을 끌고 왔더니 수직선이 생겼다.
아래 X를 수직선에 왔다 갔다 시키면 애니메이션도 블렌드되는 것을 알 수 있었다! Unity의 블렌드 트리랑 아주 유사한 기능을 하고 있는 게 맞았다.
강의 선생님은 발이 미끄러지는 것 같아 이걸 고치겠다고 하셨지만, 사실 나는 어떤 부분이 미끄러진다고 하는지 잘 몰랐다.
언리얼의 유용한 기능이라고 소개하셨다. Axis Function을 Locomotion으로 바꾸고 Bone Socket을 Left Foot, Right Foot으로 각자 지정해준 다음 분석해주었다.
사실 차이를 느끼지는 못하겠지만... Blend Space의 개념을 알았고, Analysis를 사용해본 것에 의의를 둔다!
Walk/Run State에서 Blend Space를 넣어주었다.
걷기와 뛰기가 잘 블렌딩되는 걸 볼 수 있다!
2일차 종료~ 오늘도 30분 가량 강의를 들었다. 강의를 들으면서 모르는 것을 찾아보고, 블로그에 기록하느라 30분을 들어도 시간이 두배를 훨씬 넘게 든다.
그래도 언리얼과 유니티를 비교하는 게 재미있고, 언리얼 자체도 재밌다! 역시 새로 배우는 것들은 전부 재미있는 것 같다.
블루프린트가 진짜 흥미롭고 재미있는 것 같다. 코드로 쓸만한 로직들을 노드를 생성해 연결하니 게임을 하는 것 같기도 하다. 그래도, 언리얼에서 C++ 스크립트를 빨리 짜보고 싶은 마음이 있다. 이 강의에서 스크립트를 다룰지, 다루지 않을지는 모르겠지만...
유익한 시간이었다! 점점 언리얼이 재미있어진다.
'Unreal' 카테고리의 다른 글
[공부일지][3일차] <Your First Game In UE5> 5 (1) | 2023.01.24 |
---|---|
[공부일지][3일차] <Your First Game In UE5> 4 (0) | 2023.01.24 |
[공부일지][2일차] <Your First Game In UE5> 2 (1) | 2023.01.23 |
[공부일지][1일차] <Your First Game In UE5> 1 (1) | 2023.01.22 |
[공부일지][1일차] <Your First Game In UE5> 0 (1) | 2023.01.22 |