그 기사에서 계속.
– 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(점프)을 각각 입력하여 실행합니다.
결과
같은 모델이지만 서로 다른 애니메이션의 움직임을 수행하여 리타게팅이 잘 된 것을 확인할 수 있습니다.