Unity의 역운동학(IK) 사용하기

이 문서에서는 Unity에서 역운동학(IK) 기능을 사용하여 캐릭터가 오브젝트와 상호작용하도록 만드는 방법을 설명합니다. IK를 사용하면 캐릭터의 관절이 특정 위치와 회전을 맞추도록 조정할 수 있습니다.

역운동학(IK)란?

대부분의 애니메이션은 부모 관절의 회전에 따라 자식 관절들이 제어되는 순운동학(FK) 방식으로 이루어집니다. 그러나 특정 포지션에 맞춰 관절의 방향을 조절하고자 할 때 역운동학(IK)이 유용하게 사용됩니다. IK는 사용자가 선택한 포인트를 효율적으로 조정하여 캐릭터가 그 포인트에 자연스럽게 접근하도록 도와줍니다.

IK 설정하기

  1. 캐릭터 준비하기
  2. 유효한 아바타가 있는 캐릭터를 준비합니다.
  3. 애니메이터 컨트롤러 생성
  4. 캐릭터에 대한 애니메이션이 포함된 Animator 컨트롤러를 생성합니다.
  5. IK Pass 활성화
  6. Animator 창의 Layers에서 레이어의 톱니바퀴 설정 아이콘을 클릭 후 IK Pass 체크박스를 활성화합니다.
  7. 스クリpt 연결
  8. 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와 같은 자연스러운 모양으로 조정할 수 있습니다.

  1. 빈 게임 오브젝트를 생성하고 손이 있어야 할 위치에 배치합니다.
  2. 빈 게임 오브젝트를 IKControl 스크립트의 오른손 오브젝트 프로퍼티에 할당합니다.

사용 사례

  • 캐릭터가 오브젝트를 쥐고 있을 때
  • 플레이 모드에 진입시 캐릭터가 오브젝트를 들어올리는 장면을 시뮬레이션합니다.
  • IKActive 체크박스를 통해 손이 올바르게 오브젝트에 닿는지 확인할 수 있습니다.

매뉴얼 요약

단계 설명
1 유효한 아바타와 애니메이터 컨트롤러 준비
2 IK Pass 활성화
3 IKControl 스크립트 연결 및 설정
4 빈 게임 오브젝트 설정
5 플레이 모드에서 IK 기능 테스트

이러한 과정을 통해 여러분의 캐릭터가 자연스럽게 오브젝트와 상호작용하도록 만들 수 있습니다! Unity에서 IK를 적극 활용하여 더욱 실감나는 애니메이션을 구현해 보세요.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA