(Unity) 메카님 애니메이션 + 리타겟팅

그 기사에서 계속.

(유니티) 애니메이션 개요

3D 모델은 뼈(그림의 점)와 골격(뼈를 연결하는 선)으로 구성됩니다.

변형이 뼈에 삽입되고 작동합니다.

Unity 애니메이션(모델러용 일반) – Unity 엔진 내

enjoy-coding-together.tistory.com

– Mecanim은 Unity의 애니메이션 상태 머신 시스템입니다.


– Mecanim은 기본적으로 상태를 생성하여 애니메이션 재생을 관리하고 전환 논리를 사용하여 다른 애니메이션 상태로 전환할 수 있습니다.


(비주얼 스크립팅 – 비주얼 스크립팅 / 대표 : Unreal-Blueprint)
– 메카님은 리타게팅 시스템을 완벽하게 지원합니다.

Unity-chan을 사용하여 메카님 애니메이션을 연습하기로 했습니다.

유니티짱!
모델 | 3D 캐릭터 | Unity 에셋 스토어

Unity-Chan으로 작업 흐름을 향상시키세요!
unity-chan!
의 모델 자산. Unity 에셋 스토어에서 이 아이콘과 다른 캐릭터 옵션을 찾아보세요.

assetstore.unity.com

먼저 캐릭터 컨트롤러를 붙였습니다.



폴더-오른쪽 클릭-만들기-Animator Controller로 애니메이터를 만듭니다.


또는 Window – Animation – Animator로도 가능합니다.


Animator 창이 아래와 같이 나타납니다.


상체와 하체 애니메이션도 Layer 창을 통해 UpperLayer/LowerLayer로 별도로 작성됩니다.

오른쪽 클릭 – 상태 만들기 – 비어 있음을 클릭하여 새 상태를 만듭니다.


상태 이름을 Idle로 변경하고 대기 모션을 Motion으로 넣었습니다.



다시 오른쪽 클릭 – 상태 만들기 – 비어 있음을 클릭하여 새 상태를 만듭니다.

Run 상태를 다시 생성한 후 Idle을 마우스 오른쪽 버튼으로 클릭하고 Make Transition을 클릭하여 Run에 연결합니다.


실행 후 Idle 상태로 돌아갈 수 있으므로 반대 방향으로도 연결하십시오.


Idle -> Run의 화살표 부분을 클릭하면 인스펙터에 다음과 같이 나타납니다.


종료 시간 있음: 애니메이션이 한 번만 실행됩니까, 아니면 즉시 변경됩니까?

설정: 애니메이션이 전환되는 시간

해당 애니메이터를 Unity-chan 모델의 애니메이터 컨트롤러에 넣습니다.


루트 모션 적용: 개발자 옵션. 코드 제어에는 선택 취소가 필요합니다.

다음과 같이 코드를 작성합니다.

public class CMecanimController : MonoBehaviour
{
    CharacterController chanController;
    Vector3 direction;

    #region public 변수
    public float runSpeed = 4.0f;
    public float rotationSpeed = 360f;
    #endregion

    Animator animator;

    void Start()
    {
        chanController = GetComponent<CharacterController>();

        animator = GetComponentInChildren<Animator>();
        //GetComponentInChildren : 계층구조 2단계까지만 자식으로 내려가도록 허용시킨다.

} void Update() { animator.SetFloat("aSpeed", chanController.velocity.magnitude); ChanControll_Slerp(); } //Slerp: 구면보간 void ChanControll_Slerp() { Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); //거리 계산(크기) -> 제곱근 if (direction.sqrMagnitude > 0.01f) { Vector3 forward = Vector3.Slerp ( transform.forward, direction, rotationSpeed * Time.deltaTime / Vector3.Angle(transform.forward, direction) ); transform.LookAt(transform.position + direction); } else { //애니메이션 없다.

} chanController.Move(direction * runSpeed * Time.deltaTime); } }

결과


같은 방법으로 다음과 같이 애니메이터를 만들었습니다.


단, 속도가 0보다 클 경우 Run으로 변경되며, 키 입력 시 Attack 또는 Jump로 설정됩니다.


Animator 창에서 Parameter->Right + mark->플로트 1개와 트리거 2개를 추가했습니다.

매개변수는 코드로 제어할 수 있는 애니메이션 실행 조건이 됩니다.

bool과 trigger의 차이점은 bool이 T일 때 애니메이션을 실행하도록 설정되어 있으면 다른 애니메이션에서 빠져 나오려면 bool을 F로 변경해야 한다는 것입니다.

그러나 트리거가 시작되면 해당 애니메이션이 한 번 재생된 후 종료됩니다.

애니메이터 창에서 화살표의 다음 부분에 조건을 적용할 수 있습니다.


나갈 때 트리거를 설정할 필요가 없습니다.

결과


애니메이션 리타겟팅

Fighting Unity Chang이라는 추가 자산을 대상 변경을 위해 가져왔습니다.


Unity-chan의 아바타를 변경하겠습니다.

그러나 Unity-chan과 Fighting Unity-chan은 동일한 아바타 이름을 가지고 있습니다.


이 경우 하단의 파일 경로에서 Fighting Unity-chan의 경로를 확인하고 선택하십시오.

변경 후 애니메이터 창에서 각 애니메이션을 Fighting Unity-chan의 애니메이션으로 다시 변경하십시오.


파일 경로를 통해서도 식별할 수 있습니다.

Idle, Run, Hikick(공격), Rising(점프)을 각각 입력하여 실행합니다.

결과


같은 모델이지만 서로 다른 애니메이션의 움직임을 수행하여 리타게팅이 잘 된 것을 확인할 수 있습니다.