유니티 애니메이터

RudinP·2023년 3월 28일
0

Study

목록 보기
14/211

애니메이션 클립

  • 3D 모델 프리팹 안에 애니메이션 클립이 같이 있는 경우가 있다.
    • 이 경우 별개 에셋으로 복사해 애니메이션 파일을 빼내 편집할 수 있다.
  • Animation 윈도우 탭에서 직접 애니메이션 클립을 만들 수 있다.
    • 원하는 오브젝트를 선택 후 애니메이션 탭의 녹화 버튼을 누르고 오브젝트를 조작하면 선택한 키 프레임 때(타임라인을 드래그) 움직임이 저장된다.


애니메이터 컨트롤러(FSM)

  • 유니티의 애니메이터는 FSM(Finite State Machine) 으로 구성되어 있다.
    • FSM은 유한 상태 머신으로, 한 번에 한가지 상태만 존재할 수 있다.


애니메이터 파라미터

  • Float, Int, Bool 형은 기본적인 문법과 동일
  • Trigger은 점프와 같은, 한 번 해당 상태를 찍고 다시 돌아오게 된다면 쓰는 파라미터다.
  • 사용법:
using UnityEngine;

public class PlayerController : MonoBehaviour
{
	public Animator anim;
    
    void Update()
    {
    	if(Input.GetButtonDown("Jump")
    		anim.SetTrigger("jump"); //철자 중요
        float horizontal = Input.GetAxis("Horizontal");
        anim.SetFloat("horizontal", horizontal);
    }
    
}

트랜지션

  • 각 상태 간 전이를 설정해 줄 수 있다.
  • Has Exit Time
    • 해당 옵션을 체크해주면 전이할 때 이전 상태에서 애니메이션이 끝나기 까지 기다려준다.
  • Fixed Duration
    • 해당 옵션을 체크해주면 Transition Duration을 초 단위로 설정 가능하다.
    • 해제 시, 0.0~1.0 으로 조절
  • Transition Duration: 전이 중 양 측 애니메이션을 얼마나 블렌딩해줄지 정할 수 있다.
    • 0에 가까울수록 바로 전이되지만 부자연스럽다.
    • 1에 가까울수록 전이가 느려지지만 좀 더 자연스럽다.
  • Transition Offset: 전이될 애니메이션이 언제부터 재생될 지 offset
  • Conditions에서 전이되는 조건을 설정해 줄 수 있다.

  • Any State: 어떤 상태였던 간에 조건을 충족하면 해당 상태로 전이 가능하도록 해주는 상태이다.
    • ex) Idle, Walk 두 상태일 때 모두 Jump 상태로 전이 가능
  • 주의할 점: 유니티에서는 아무 조건 설정 없이 Transition을 설정해두면 자동으로 전이되는데, 이 때는 Has Exit Time이 반드시 체크되어야 한다.


블랜드 트리

  • 2D 어쩌구 3종류가 있는데 약간씩 다를 뿐 기능 자체는 비슷하다고 한다.

  • 보통은 이런 식으로 Idle, 상하좌우 이동을 표현한다.
  • 파라미터 값에 따라 적절히 애니메이션을 섞어준다.
  • 블랜드 트리를 쓰면 FSM을 보다 더 간단하게 관리 가능하다.

루트 모션

  • 애니메이터에 의해 플레이어의 좌표 값이 변경됨
  • 코드를 통해 조작하고 싶다면 체크 해제해야 함 (일반적인 경우)


아바타

  • Animation Type 이 같은 경우 모델이 다르더라도, 애니메이션은 같은 Animation Type끼리는 호환 가능하다.


애니메이터 레이어

  • 동시에 여러개의 상태 머신을 실행
  • 아래에 있을수록 표시 우선순위가 높다.
  • Weight: 0.0~1.0으로 1에 가까울수록 상위 레이어와 섞임이 덜하고 해당 레이어만 표시된다.
  • Mask : 만들어둔 유니티 마스크를 설정할 수 있는데, 마스크에서 아바타의 구성 중 어느 부분만 애니메이션이 적용되도록 할 것인지 마스킹하는 파일이다.
    -Blending
    • Override : 덮어씌움
    • Additive : 적절히 섞음


IK (Inverse Kinematic)

  • 특정 지점을 기준으로 모델의 관절 위치를 역계산
  • 물체의 위치를 기점으로 시선이나 팔의 위치 등을 결정하고자 할 때 사용
    • ex) 물건을 집게 할 때
	public Transform target;
    //해당 함수는 유니티가 IK를 갱신하려할때마다 실행됨.
	void OnAnimatorIK() //애니메이터가 부착된 오브젝트에서만 실행됨.
    {
    	//SetIK~Weight() 함수는 IK의 우선순위를 정함( 0.0~1.0)
    	anim.SetIKPositionWeight(AvartarIKGoal.LeftHand, 1.0);
        anim.SetIKRotationWeight(AvartarIKGoal.LeftHand, 1.0);
        
        anim.SetIKPosition(AvartarIKGoal.LeftHand, target.position);
        anim.SetIKRotation(AvartarIKGoal.LeftHand, target.rotation);
        
        //target을 보도록
        anim.SetLookAtWeight(1.0f);
        anim.SetLookAtPosition(target.position);
    }

  • 적용하려면 애니메이션의 레이어 설정에서 IK Pass를 체크해야 함.

  • 관절 범위 내면 target을 따라 이동, 거리가 멀면 해당 방향을 향함.

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글