01 FBX Model 개요
✅ FBX Model
02 FBX Model - Model
03 FBX Model - Rig
✅ Optimize Game Object
✅ Optimize Game Object 결과
✅ FBX Model - Rig [Animation Type : Generic]
✅ FBX Model - Rig [Animation Type : Humanoid]
✅ 아바타 정보 - Mapping
✅ 아바타 정보 - Muscles & Settings
04 FBX Model - Animation
✅ FBX Model - Animation [None]
아래 이미지와 같이 애니메이션 정보가 없는 경우 FBX는 정보가 뜨지 않는 것을 볼 수 있다.
✅ FBX Model - Animation
애니메이션 정보가 있으면 아래와 같이 관련 정보를 확인할 수 있다.
05 FBX Model - Materials
본격적인 실습을 위해 에셋 스토어에서 가져온 모델을 Hierarchy View로 이동시키고 해당 모델과 카메라의 위치를 수정해줄 수 있다.
06 Mecanim Animation System
메카님 에니케이션의 전체적인 구조
📌 Animator 컴포넌트
✅ Controller : Animator Controller
애니메이션 (상태, state) 의 전환을 처리하는 노드 기반 시스템 상태 머신
✅ Avatar : 외부 툴로 제작한 모델 파일을 유니티에서 다룰 수 있게 연결하는 데이터
애니메이션 되는 Rig 정보로 *.fbx 파일을 Import 해서 생성하였다면 자동 설정되어 있다
동일한 Rig 정보를 가지고 있는 모델이라면 리타겟팅을 이용해 애니메이션 재사용 가능
✅ Apply Root Motion : Animation Clip에 포함된 루트 모션을 사용할 것인지 설정
- true : 애니메이션에 포함된 이동, 크기 변화, 회전을 사용
- false : 애니메이션에 포함된 이동, 크기 변화, 회전을 사용하지 않고 코드로 직접 제어
✅ Update Mode : 애니메이션의 계산을 언제 할지 설정
- Normal : Update() 함수와 같은 횟수로 호출
- Animate Physics : FixedUpdate () 함수와 같은 횟수로 호출
- Unscaled Time : Update() 함수와 같은 횟수로 호출되지만 TimeScale 의 영향을 받지 않는다
✅ Culling Mode : 애니메이션 계산의 컬링 모드 설정
- Always Animate : 컬링을 하지 않고 항상 애니메이션 계산을 한다
- Cull Update Transforms : 컬링 대상일 때 애니메이션 계산의 일부를 생략 (리타깃, IK, Transform)
- Cull Completely : 컬링 대상일 때 모든 애니메이션 계산을 생략
💡 Tip. *.fbx 파일로 생성된 오브젝트는 Animator 컴포넌트가 기본으로 부착되어 있음
📌 Animator Controller Asset
- 현재 Animator 에서 재생 가능한 애니메이션(clip)들을 관리하는 상태 머신
- 파일 생성 : Project View - "+" - Animator Controller
- 애니메이터 수정 : Window - Animator View 에서 수정
📌 Animator View에 등록된 애니메이션 상태
📌 Animation Asset (*.anim): 하나의 애니메이션 동작에 대한 설정 (걷기, 왼손을 휘둘러 공격, 점프, 대기 등)
위 내용을 바탕으로 실제 애니메이션 재생을 위해 애니메이터 컨트롤러를 추가하고 이름을 Player로 변경해주었다. 이후 이를 unitychan 오브젝트에 애니메이터 컴포넌트 중 컨트롤러 변수에 넣어줄 수 있다.
다음으로 애니메이터 뷰를 통해 새로운 애니메이터를 생성하고 이에 대한 모션 값으로 WAIT00을 넣어줄 수 있다. 이후 게임을 실행하면 오브젝트가 WAIT00 애니메이션을 실행하는 것을 볼 수 있다.
07 애니메이션 전환 - Play()
추가로 달리는 것에 대한 애니메이션 설정을 위해 위와 같이 애니메이션을 추가해주었고, 이를 스크립트 코드를 통해 제어해보자.
📌 PlayerController.cs 스크립트 코드
using UnityEngine; public class PlayerController : MonoBehaviour { private Animator animator; private void Awake() { animator = GetComponent<Animator>(); } private void Update() { if (Input.GetKeyDown(KeyCode.I)) { animator.Play("Idle"); } else if (Input.GetKeyDown(KeyCode.R)) { animator.Play("RUN00_F"); } } }
이후 게임을 실행하면 아래와 같이 R 키를 누르면 Run 하는 애니메이션이 재생되고, I키를 누르면 멈추는 애니메이션이 재생되는 것을 확인할 수 있다.
08 애니메이션 전환 - 상태전이(Transition)
주최가 되는 애니메이션에서 마우스 오른쪽을 눌러 'Make Transition' 버튼을 클릭하여 생성된 화살표를 Run 애니메이션에 가져가면 위와 같이 화살표가 연결되는데 이를 바로 상태 전이라고 한다.
반대로 Run에서 Idle로 이어지는 화살표도 생성 가능하다
이렇게 상태 전이가 설정된 경우 게임을 실행하면 애니메이션을 1회 재생하고 화살표가 이어져있는 방향으로 애니메이션이 전환되어 실행되는 것을 확인할 수 있다.
📌 조건을 이용한 상태전이 제어✅ 파라미터 생성
✅ 상태전이 설명
float 타입의 파라미터를 하나 생성해주고 이름은 moveSpeed로 변경한다.
Idle에서 Run으로 가는 화살표를 선택하고 'Has Exit Time'의 체크 표시를 해제한 후 아래 Conditions 부분에서 플러스 버튼을 누르고 moveSpeed의 값을 0.1로 변경해준다. 이는 moveSpeed 파라미터 값이 0.1보다 크면 RUN 애니메이션으로 전환하라는 의미이다.
반대로 Run에서 Idle로 이어지는 상태전의의 경우 동일하게 'Has Exit Time'의 체크표시를 해제한 후 Conditions 부분에서 moveSpeed를 이번엔 조건을 Less로 설정하고 0.1 값을 입력할 수 있다.
앞서 작성했던 PlayerController.cs 코드를 아래와 같이 수정해줄 수 있다.
📌 수정된 PlayerController.cs 스크립트 코드
using UnityEngine; public class PlayerController : MonoBehaviour { private Animator animator; private void Awake() { animator = GetComponent<Animator>(); } private void Update() { if (Input.GetKeyDown(KeyCode.I)) { //animator.Play("Idle"); animator.SetFloat("moveSpeed", 0.0f); } else if (Input.GetKeyDown(KeyCode.R)) { //animator.Play("RUN00_F"); animator.SetFloat("moveSpeed", 5.0f); } } }
스크립트 수정 후 게임을 실행하면 다음과 같은 결과를 확인할 수 있다.
실행 직후에는 파라미터 값이 0이기 때문에 Run으로 넘어가지 않는 것을 확인할 수 있다. 이때, R 키를 눌러 moveSpeed 값을 5로 변경해준다면 Run 애니메이션으로 넘어가게 되며, i 키를 누르게되면 moveSpeed가 0이 되어 Idle로 애니메이션이 교체되는 것을 확인할 수 있다.
출처 : 따라하면서 배우는 고박사의 유니티 기초(https://inf.run/sgcy)
'Study > Unity' 카테고리의 다른 글
[Unity 3D Basic] Animation Layer, Blend Tree 실습 (0) | 2024.05.22 |
---|---|
[Unity 3D Basic] Animation Layer, Blend Tree (0) | 2024.05.22 |
[Unity 3D Basic] Navigation Mesh 응용 (0) | 2024.05.15 |
[Unity 3D Basic] Navigation Mesh 기초 (0) | 2024.05.15 |
[Unity 3D Basic] CharacterController 기반의 오브젝트 이동 (1) | 2024.05.08 |