Unity C# > 컴포넌트 : Animation 관련 컴포넌트들과 프로퍼티/함수 모음
카테고리: UnityDocs
태그: Unity Game Engine
공부하면서 알게된 것만 정리합니다.😀
👩🦰 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
이 체크되어 있지 않더라도 이렇게 코드로 반복 재생 시킬 수 있다.
- anim.Play 를 부드럽게 하는 것이라고 보면 된다. 부드럽고 자연스럽게 블렌딩되듯 애니메이션이 재생된다.
인수로 들어간 애니메이션 클립을 재생시킨다.(애니메이터 컨트롤러의 재생 시킬 상태의 이름)
✈ 파라미터 관련 : 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
시간 간격동안 부드럽게 변경해주도록 한다.
- 이전에 설정한 파라미터 값에서 방금 설정한 파라미터 값으로 0.05초의 지연시간을 거쳐 이
- ex) SetFloat(“Horizontal Move”, moveInput.x * animationSpeedPercent, 0.05f, 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);
- 시선을 해당 타겟의 위치로 이동시킨다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기