Unity - Animation Rigging

땡구의 개발일지·2025년 8월 2일

Unity마스터

목록 보기
67/78
post-thumbnail

TPS 게임에서 마우스를 움직이면, 캐릭터도 따라 움직여야 한다. 애니메이션을 덮어 씌워서 원하는 움직임을 표현하는 애니메이션 리깅을 알아본다.

🚩 애니메이션 리깅

Animation Rigging - 유니티 문서

애니메이션 리깅이라는 이름답게, 기존의 애니메이션에 추가적인 기능을 부여한다. 사용자의 입력에 따라서 달라지는 애니메이션을 적용시키기 위해서 사용하는 시스템. 예를들어, 카메라 중앙으로 캐릭터의 상체와 총을 움직이게 하는 데 필요한 것이다.

📦 패키지 설치


패키지 매니저에서 설치하면 된다. 샘플을 다운 받으면, 어떻게 적용되는 것인지 볼 수 있다.

📦 Rig Builder

모델의 rig을 설정하는 데 사용되는 컴포넌트다.

사용할 캐릭터 에셋을 가져온다.

탭에서 위와같이 누르면 Rig 1 게임 오브젝트가 새로 생성된다.

캐릭터 오브젝트에는 Rig Builder라는 컴포넌트가 부착되고

Rig 1 오브젝트에는 Rig라는 컴포넌트가 부착된다. 이 Rig 1 안에 게임 오브젝트를 넣고, Animation Rigging 컴포넌트를 부착하면 된다.

📦 Bone renderer setup

근데, 캐릭터의 관절 하나하나 설정하기 힘들다. 보통 캐릭터 에셋은 관절별로 게임 오브젝트가 설정되어 나오기 때문에, 자동으로 리깅이 되어 있다.

이걸 클릭하면, 현재 캐릭터에 적용된 rig을 한 눈에 볼 수 있다.

씬 창에서 캐릭터에게 이제 Bone이 표시된다.

위와같이 구조를 GUI 형태로 확인할 수 있고, 직접 편집이 가능하다.

씬 창에서 직접 bone을 클릭하면 실제 해당 bone 게임오브젝트가 선택된다.

🔧 Multi-Aim Constraint

어느 한 지점을 바라보게 하는 데 사용되는 컴포넌트. 캐릭터의 프리팹에 Rig Setup을 누르면 자동으로 Rig 1이름의 게임 오브젝트가 하위로 추가된다. Rig 1의 하위에 head 오브젝트를 추가한다. 이름은 자유롭게 바꿔도 된다.

head에 컴포넌트를 추가하자. Add Component -> Multi-Aim Constraint 컴포넌트를 추가한다. Constraint Object는 리깅의 대상이 되는 Rig다.

씬 창에서 캐릭터의 머리 bone을 클릭하면, 해당 되는 게임 오브젝트가 바로 하이라키 창에서 선택된다.

해당 머리 오브젝트의 Transform을 Constrained Object에 넣어주자. 그다음 Axis 설정을 해주는데 해당 오브젝트가 향해야 하는 방향을 넣어주면 된다. Local 기준으로 잡아줘야 한다.
이제 무엇을 쫒을 지 넣어줘야 한다.

여기에 Transform를 참조시킨다. AimTarget은 빈 오브젝트다. 아무데나 놔둬도 된다.

씬 창에서 새로 Animation Rigging 패널이 생겼다. 캐릭터 게임 오브젝트를 하이라키창에서 클릭하면 활성화 된다. Shape를 위와같이 BallEffector로 바꿔주자. 조금 보기 편해진다.

BallEffector가 없을 경우 Animation Rigging 패키지에서 Samples를 추가해주자. 그리고, Select Mesh에서 오른쪽 옆 구석에 눈모양을 토글해서 숨긴 mesh도 열어줘야 한다.


이제 빨간 공모양으로 한눈에 잘 보인다.

현재 설정은 이러하다

캐릭터를 선택한 다음, Animation 탭에서 Preview를 누르면 게임을 Play 하지 않아도 애니메이션이 재생된다. 이제 타겟을 움직이면서 관찰하자. Source Object의 옆에 있는 슬라이드 값은 Weight다.

🏃‍♀️ 애니메이션 프리뷰

이제 타겟을 따라서, 캐릭터의 bone이 회전한다. bone 구조 상, 상체를 기준으로 잡으면, 상체의 자식으로 있는 팔, 머리 등도 같이 회전한다. 보다시피, 재생되고 있는 애니메이션 자체에는 영향을 주지 않는다.

📌 주의점

플레이 시에는 컴포넌트의 사항들을 변경해도 적용이 되지 않는다. 이게 애니메이션 프리뷰를 쓰는 이유인데, 플레이로 들어가기 전에 세팅된 값을 기준으로 리깅이 적용되기 때문에, 플레이 중 값을 변경해도 적용이 되지 않는다.

애니메이션 프리뷰에서 제대로 작동하게 만든 다음 플레이 테스트를 진행하자.

🔧 오프셋


눈높이에 있는 타겟인데, 약간 위를 쳐다보고 있다. Offset을 통해 해당 문제를 해결할 수 있다. 해당 값은, Preview 상태에서도 적용되니까 조절해보자.

Z 값을 -10 주어서 해결한 모습.

꺾이는 값도 Offset 설정해준다. 대략 80 정도를 Max 걸어주면, 자연스러웠다.


아래로 최대 꺾이는 모습

위로 최대 꺾이는 모습

🔧 Weight


애니메이션을 덮어 쓰는 수준을 Weight로 한다. 0 ~ 1 사이의 값이다. 애니메이션에서 레이어의 Weight와 동일한 기능으로 생각하면 된다.

📜 스크립트로 관리하기

스크립트로 관리하는 방법을 알아본다. 리깅은 다음 네임스페이스를 사용한다.

using UnityEngine.Animations.Rigging;

💡 스크립트 사용 용도

게임의 상황에 따라 Rig를 꺼야할 수 있기 때문이다.

TPS게임에서 공격 키를 누르고 있을 때만 카메라의 정면방향을 응시하게 하는 기법을 생각해볼 수 있다. 배틀그라운드, 몬스터헌터 같은 게임을 떠올려보자.

📜 Weight 스크립트

아주 간단하게 조건에 따라 Weight를 키고, 끄는 스크립트다.

using UnityEngine;
using UnityEngine.Animations.Rigging;

public class AnimationRiggingWeight : MonoBehaviour
{
    private Rig rigging;
    private float targetWeight;
    void Start()
    {
        rigging = GetComponent<Rig>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            targetWeight = 1;
        }

        if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            targetWeight = 0;
        }
        if (rigging.weight == targetWeight) return;
        rigging.weight = Mathf.Lerp(rigging.weight, targetWeight, Time.deltaTime* 10f);
    }
}

✅ 플레이 테스트


플레이 화면에서 숫자 키 1, 2를 누름에 따라 Rig의 weight가 1과 0으로 각각 바뀐다. 사선을 바라보는것이 Weight 1 값이다.


🚩 IK

  • Inverse Kinetics

말단 관절을 기준으로, 상위 관절들이 역으로 제어되는 기법이다.

🏃‍♀️ Two Bone IK Constraint


발 관절 IK를 설정해보자. 이전과 앞부분은 동일하다.
1. Rig Setup
2. Bone Renderer Setup
3. 캐릭터 프리팹에 Rig 1Foot IK 이름의 빈 오브젝트를 생성, Two Bone IK Constraint 를 컴포넌트로 추가한다.

  • Root : 발일 경우, 엉덩이. 팔일 경우, 어깨
  • Mid : 발일 경우, 무릎. 팔일 경우, 팔꿈치
  • Tip : 발일 경우, 발바닥. 팔일 경우, 손


SD 캐릭터라 발이 잘 안보이지만, 해당 하이라이트 된 부분이 발(Tip)이다.

Tip부터 추가해본다. 선택한 bone을 Tip에 넣어준다.

Auto Setup from Tip Transform을 누르면, 자동으로 채워진다.

이렇게 나머지를 전부 자동으로 채워준다. Source Objects에서 target, hint가 각각 새로 추가된 것을 볼 수 있다.

  • Target : 발이 실제로 놓일 표면 위치다. 화면에서 빨간 큐브다.
  • hint : 보조 타겟 정도로 생각하면 된다. 무릎, 팔꿈치 등이 향하는 방향을 결정한다. 화면에서 빨간 원이다.

🏃‍♀️ Preview


설정한 것처럼, Tip은 Target에 고정되고, Mid는 hint의 위치로 향한다.

🔧 총 연결하기

이제 배운것들로 총을 연결하고 발사할 수 있게 해본다.

rig 구조는 위와 같다.


Rigging이 Rig 컴포넌트를 가지고 있는 오브젝트다.

상체 Aim

손바닥(총) Aim

왼팔 IK

오른팔 IK

✅ 결과


평상시에는 Rig의 Weight를 0으로 해두다가, 발사할 때만 Rig의 Weight를 1로 올리고 발사 애니메이션을 적용한다.

💡 세부조정

각도가 만족스럽지 않다면, 애니메이션 탭의 Preview에서 적용하고자 하는 애니메이션 클립을 골라서(사격자세) target과 hint의 transform을 조정한다.

💥 마우스 포인터에 맞게 발사하기

화면 정중앙에 Raycast를 해서 나온 결과값 중 좌표(Point)값을 target 오브젝트의 Position에 대입하면 된다.
Raycast의 길이는 50(m)정도면 충분하다.

벽에 그려지는 빨간색 점이 Raycast의 결과값 중 좌표를 넣은 target이다.


🚩 그 외


다룬 것들 이외에도 유니티 매뉴얼에서 어떻게, 어디에 쓰는지 잘 나와있다. 사용법도 간단하니, 그때그때 찾아서 사용하자.

profile
개발 박살내자

0개의 댓글