[Go-Unity 3D] 17. 3D Model / Animation 애니메이션 ⭐⭐⭐
카테고리: Go Unity
3D Model / Animation
고박사의 유니티 기초를 정리.
1. 3D Model
에셋스토어 unity-chan을 사용
Model , Rig , Animation , Materials
Model
외부에서 가져온 FBX 모델의 기본적인 정보
Scene
광원과 카메라 임포트 여부, 모델 크기 등 씬과 관련된 옵션 설정
- Scale Factor : 원본 모델의 크기 설정
- Improt BlendShapre : 블렌드 셰이프를 메시와 함께 Import
Meshes
메시 압축, 최적화 등 메시와 관련된 옵션 설정
- Mesh Compression : 메시 파일 크기를 줄일 압축 레벨 설정
- Generate Colliders : 메시 콜라이더를 사용할지 여부 (충돌 처리)
Geometry
UV와 노말 처리 등을 위한 지오메트리 관련 옵션 설정
- Normals : 노말 벡터를 계산할지, 어떻게 계산할지 설정
Rig
FBX 모델의 리깅 정보
리깅(Rigging)
모델의 뼈대를 만들어 심거나 뼈대를 할당하여, 모델이 애니메이션 될 수 있는 상태로 만드는 것
Animation Type
- None : 애니메이션이 없을 때 (지형, 건물, 아이템 등)
- Generic : 정점 애니메이션 (Animator 컴포넌트) 정점 정보를 미리 담아두고 재생, 모델링 정보가 수정되면 애니메이션도 수정, 연산속도가 빠르고 용량이 크다.
- Humanoid : 본 애니메이션 (Animator 컴포넌트) 뼈대를 심어 움직임에 맞게 메시가 움직임, 연산속도가 느리고 용량이 작다. 실시간으로 연산
Generic,Humanoid
캐릭터, 몬스터와 같은 애니메이션이 존재할 때 사용
- Avatar Definition : 아바타 정의를 가져올 위치 선택
- Skin Weights : 하나의 버텍스에 영향을 줄 수 있는 최대 뼈대 수
- Optimize Game Object : 게임오브젝트의 Transform 계층 구조를 Avatar와 animation 컴포넌트에서 제거 ( 성능 향상)
Optimize Game Object
Extra Transforms to Expose : Optimize Game Object체크 시 활성화
체크되는 transform은 게임 오브젝트의 자식 오브젝트로 출력된다.
예를들어 오른손 무기의 위치를 따라다니게 할려면 오른손에 해당하는 transform은 최적화하지 않고 남겨둬야 한다.
Mapping : 각부위별 정보 수정
Muscles&Settings : 근육 수정
Animation
FBX모델의 애니메이션 정보
애니메이션 정보가 있으면 압축 타입 을 설정하는 FBX 에셋정보
Materials
FBX모델에 적용되는 재질 정보
2. Animation System
Animation Controller 생성 상황에 따른 에니메이션 추가 컴포넌트에 Controller 설정
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");
}
else if ( Input.GetKeyDown(KeyCode.R) )
{
animator.Play("RUN00_F");
}
}
}
- I 입력시 Idle(wait00) 재생
- R 입력시 Run 재생
- 작성 후 unity Jang오브젝트에 컴포넌트 등록
상태전이 에니메이션 전환
Animator 탭에서 parameters에서 에니메이션 전환의 조건 생성
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);
}
}
}
- MoveSpeed 에 따라 모션 변화
3. 정리
- Model 에셋 추가, 세부설정
- Animation 추가, AnimationController 사용
댓글남기기