Unity C# > 컴포넌트 : Animation 관련 컴포넌트들과 프로퍼티/함수 모음

Date:     Updated:

카테고리:

태그:

공부하면서 알게된 것만 정리합니다.😀

👩‍🦰 Animator

상태 머신으로 짜여진 애니메이션 컨트롤러를 재생시키는 컴포넌트

🚀 변수/프로퍼티

✈ applyRootMotion

  • true로 해주면 루트 모션을 켜준다.


🚀 함수

✈ Play

public void Play(string stateName, int layer = -1, float normalizedTime = float.NegativeInfinity);

public void Play(int stateNameHash, int layer = -1, float normalizedTime = float.NegativeInfinity);

anim.Play("WAIT");
anim.Play("RUN");

해당 애니메이션 state를 그대로 재생시킴.


✈ CrossFade

public void CrossFade(int stateHashName, float normalizedTransitionDuration, int layer = -1, float normalizedTimeOffset = 0.0f, float normalizedTransitionTime = 0.0f);

anim.CrossFade("RUN", 0.1f);
anim.CrossFade("ATTACK", 0.1f, -1, 0f); // layer -1 , 반복 재생.(0초로 돌아감)
  • anim.CrossFade
    • anim.Play 를 부드럽게 하는 것이라고 보면 된다. 부드럽고 자연스럽게 블렌딩되듯 애니메이션이 재생된다.
      • anim.Play를 사용하면 재생할 애니메이션 클립이 바뀔 때 뚝뚝 끊기듯이 바뀌어 부자연스럽다. anim.CrossFade 는 애니메이션이 아주 자연스럽게 바뀌게 된다.
    • 첫 번째 인수 : 재생할 클립 이름
    • 두 번째 인수 : 지연 시간 (다음 애니메이션으로 바뀌는데 걸리는 fade 시간)
      • 0.1f 라면 바뀔 애니메이션의 10 %는 부드럽게 애니메이션이 이어지는데 쓴다.
    • 세 번째 인수 : layer. 애니메이션 레이어
    • 네 번째 인수(normalizedTimeOffset) : 애니메이션의 재생 시작 시점 (0~1 비율)
      • 0.0f 로 세팅하면 다시 처음으로 돌아가 재생한다.
      • 클립의 Loop Time이 체크되어 있지 않더라도 이렇게 코드로 반복 재생 시킬 수 있다.

image

인수로 들어간 애니메이션 클립을 재생시킨다.(애니메이터 컨트롤러의 재생 시킬 상태의 이름)


✈ 파라미터 관련 : SetFloat, SetBool, SetInteger, SetTrigger

public void SetInteger(string name, int value); public void SetInteger(int id, int value);

  • SetFloat("파라미터 이름", float값) : 해당 파라미터에 인수로 넘긴 float 값을 준다. 그러면 이 조건에 맞는 애니메이션 트랜지션이 알아서 발동한다.
    • SetFloat("파라미터 이름", 값, 지연 시간, 시간간격)
      • ex) SetFloat(“Horizontal Move”, moveInput.x * animationSpeedPercent, 0.05f, Time.deltaTime);
        • 이전에 설정한 파라미터 값에서 방금 설정한 파라미터 값으로 0.05초의 지연시간을 거쳐 이 Time.deltaTime 시간 간격동안 부드럽게 변경해주도록 한다.
    • SetBool, SetInt도 사용법 마찬가지

public void SetTrigger(string name); public void SetTrigger(int id);

  • SetTrigger("파라미터 이름") : Trigger 타입인 해당 파라미터를 발동시킨다. 그러면 이 Trigger를 가진 애니메이션 트랜지션이 알아서 발동한다.


✈ 파라미터 관련 : GetFloat, GetBool, GetIntger

public float GetFloat(string name); public float GetFloat(int id);

인수는 애니메이션 파라미터가 된다. 인수에 해당하는 애니메이션 파라미터의 값을 가져 온다.


✈ IK 관련 : SetIKPositionWeight

public void SetIKPositionWeight(AvatarIKGoal goal, float value);

  • 관절 꺾을 대상과 함께 Position면에 있어 IK의 우선순위를 결정한다.
  • float 값이 1.0에 가까울수록 IK가 더 강하게 적용됨


✈ IK 관련 : SetIKRotationnWeight

public void SetIKRotationWeight(AvatarIKGoal goal, float value);

  • 관절 꺾을 대상과 함께 Rotation면에 있어 IK의 우선순위를 결정한다.
  • float 값이 1.0에 가까울수록 IK가 더 강하게 적용됨


✈ IK 관련 : SetLookAtWeight

public void SetLookAtWeight(float weight, float bodyWeight = 0.0f, float headWeight = 1.0f, float eyesWeight = 0.0f, float clampWeight = 0.5f);

  • 시선 처리
  • float 값이 1.0에 가까울수록 IK가 더 강하게 적용됨


✈ IK 관련 : SetIKPosition

public void SetIKPosition(AvatarIKGoal goal, Vector3 goalPosition);

  • Position면에 있어 관절 꺾을 대상과 중심이 되는 위치
  • 해당 위치를 중심으로 해당 아바타의 관절을 꺾어 이동시킴


✈ IK 관련 : SetIKRotation

public void SetIKRotation(AvatarIKGoal goal, Quaternion goalRotation);

  • Rotation면에 있어 관절 꺾을 대상과 중심이 되는 위치
  • 해당 위치를 중심으로 해당 아바타의 관절을 꺾어 회전시킴


✈ IK 관련 : SetLookAtPosition

public void SetLookAtPosition(Vector3 lookAtPosition);

  • 시선을 해당 타겟의 위치로 이동시킨다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

UnityDocs 카테고리 내 다른 글 보러가기

댓글 남기기