Unity의 역운동학(IK) 사용하기
이 문서에서는 Unity에서 역운동학(IK) 기능을 사용하여 캐릭터가 오브젝트와 상호작용하도록 만드는 방법을 설명합니다. IK를 사용하면 캐릭터의 관절이 특정 위치와 회전을 맞추도록 조정할 수 있습니다.
역운동학(IK)란?
대부분의 애니메이션은 부모 관절의 회전에 따라 자식 관절들이 제어되는 순운동학(FK) 방식으로 이루어집니다. 그러나 특정 포지션에 맞춰 관절의 방향을 조절하고자 할 때 역운동학(IK)이 유용하게 사용됩니다. IK는 사용자가 선택한 포인트를 효율적으로 조정하여 캐릭터가 그 포인트에 자연스럽게 접근하도록 도와줍니다.
IK 설정하기
- 캐릭터 준비하기
- 유효한 아바타가 있는 캐릭터를 준비합니다.
- 애니메이터 컨트롤러 생성
- 캐릭터에 대한 애니메이션이 포함된 Animator 컨트롤러를 생성합니다.
- IK Pass 활성화
- Animator 창의 Layers에서 레이어의 톱니바퀴 설정 아이콘을 클릭 후 IK Pass 체크박스를 활성화합니다.
- 스クリpt 연결
- IK 처리에 사용할 스크립트를 연결합니다. 이 스크립트에서는 캐릭터의 오른손에 대한 IK 타겟을 설정합니다.
IKControl 스크립트 예제
다음은 IKControl 스크립트의 예제입니다.
using UnityEngine;
using System;
[RequireComponent(typeof(Animator))]
public class IKControl : MonoBehaviour {
protected Animator animator;
public bool ikActive = false;
public Transform rightHandObj = null;
public Transform lookObj = null;
void Start() {
animator = GetComponent<Animator>();
}
void OnAnimatorIK() {
if (animator) {
if (ikActive) {
if (lookObj != null) {
animator.SetLookAtWeight(1);
animator.SetLookAtPosition(lookObj.position);
}
if (rightHandObj != null) {
animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);
animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.position);
animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.rotation);
}
} else {
animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 0);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 0);
animator.SetLookAtWeight(0);
}
}
}
}
위의 스크립트는 오른손의 타겟을 설정하고 해당 포지션과 회전을 조정하여 캐릭터의 행동을 정의합니다.
IK 타겟 설정하기
캐릭터의 손이 오브젝트의 중심에 오도록 할 필요는 없습니다. 대신 빈 자식 오브젝트를 이용하여 손이 향해야 할 위치를 설정합니다. 이렇게 하면 손의 움직임을 ITSavais와 같은 자연스러운 모양으로 조정할 수 있습니다.
- 빈 게임 오브젝트를 생성하고 손이 있어야 할 위치에 배치합니다.
- 빈 게임 오브젝트를 IKControl 스크립트의 오른손 오브젝트 프로퍼티에 할당합니다.
사용 사례
- 캐릭터가 오브젝트를 쥐고 있을 때
- 플레이 모드에 진입시 캐릭터가 오브젝트를 들어올리는 장면을 시뮬레이션합니다.
- IKActive 체크박스를 통해 손이 올바르게 오브젝트에 닿는지 확인할 수 있습니다.
매뉴얼 요약
단계 | 설명 |
---|---|
1 | 유효한 아바타와 애니메이터 컨트롤러 준비 |
2 | IK Pass 활성화 |
3 | IKControl 스크립트 연결 및 설정 |
4 | 빈 게임 오브젝트 설정 |
5 | 플레이 모드에서 IK 기능 테스트 |
이러한 과정을 통해 여러분의 캐릭터가 자연스럽게 오브젝트와 상호작용하도록 만들 수 있습니다! Unity에서 IK를 적극 활용하여 더욱 실감나는 애니메이션을 구현해 보세요.