본문 바로가기
[ Unity ]/- 유니티 실습

유니티 3D Aim Animation Rigging

by MRG 2024. 9. 30.
728x90
반응형

 

▣ Animation Rigging은 Unity에서 제공하는 강력한 기능으로, 캐릭터 애니메이션에 다양한 제약(Constraints)을 추가하여 더 정밀하게 제어하고 상호작용할 수 있게 해주는 시스템입니다. 이 기능은 캐릭터가 게임 내에서 동적으로 환경과 상호작용하거나, 애니메이션 도중 실시간으로 목표를 향해 움직이는 등의 동작을 가능하게 합니다.

 

 

▣ Rig Builder
Rig Builder는 Unity의 Animation Rigging 시스템에서 다양한 리깅 설정을 캐릭터에 적용하기 위한 핵심 컴포넌트입니다.
이 컴포넌트는 캐릭터에 다양한 리그(Rig)를 적용하고, 이를 통해 캐릭터의 애니메이션에 제약을 설정할 수 있도록 도와줍니다.
Rig Builder는 여러 Rig를 관리하고, 이들이 캐릭터 애니메이션에 영향을 미칠 수 있도록 Runtime에서 제약 조건을 평가하는 역할을 합니다.


주요 기능:
여러 개의 Rig를 캐릭터에 적용할 수 있습니다.
각 Rig는 개별적으로 활성화되거나 비활성화될 수 있으며, 이를 통해 캐릭터의 다양한 애니메이션 제어가 가능합니다.


사용 방법:
Rig Builder 컴포넌트를 캐릭터의 최상위 객체에 추가합니다.
Rig Builder는 하위에 있는 모든 Rig 컴포넌트를 자동으로 탐색하여 적용합니다.
각 Rig는 캐릭터의 애니메이션 동작에 특정 제약을 추가하는 역할을 합니다.

 

 

▣ Rig
Rig는 Animation Rigging 시스템에서 제약(Constraints)을 적용할 수 있는 프레임워크입니다.
하나의 Rig는 여러 제약 조건(예: Multi-Aim Constraint, Two Bone IK Constraint 등)을 포함할 수 있으며, 이러한 제약을 통해 캐릭터의 애니메이션을 더 정교하게 조정할 수 있습니다.


주요 기능:
캐릭터의 특정 부위에 제약을 설정하여 목표 타깃을 따라 움직이거나 회전하게 만들 수 있습니다.
예를 들어, Multi-Aim Constraint는 상체가 목표를 향해 회전하도록 제어할 수 있고, Two Bone IK Constraint는 팔이나 다리의 동작을 역운동학(IK)으로 제어할 수 있습니다.


사용 방법:
캐릭터의 특정 부위(상체, 팔, 다리 등)에 Rig를 추가합니다.
Rig 안에 필요한 제약 조건을 추가합니다.
Rig의 Weight를 조절하여 제약의 강도를 설정할 수 있습니다.

 

 

▣ Multi-Aim Constraint는 Unity의 Animation Rigging 시스템에서 제공하는 제약(Constraint) 중 하나로, 특정 목표(Target)를 향해 캐릭터의 특정 부위(예: 머리, 상체, 손 등)를 회전시키는 기능을 제공합니다. 주로 캐릭터가 목표물을 바라보는 동작을 구현하거나, 마우스나 게임패드로 조작하는 조준 시스템을 만들 때 사용됩니다.

▣ Multi-Aim Constraint의 주요 기능


특정 축을 기준으로 회전:
Multi-Aim Constraint는 캐릭터의 특정 축(Axis)을 기준으로 목표를 향해 회전합니다. 예를 들어, 캐릭터의 상체나 머리가 목표를 향해 자연스럽게 회전하도록 만들 수 있습니다.


실시간 목표 추적:
Multi-Aim Constraint는 목표(Target) 객체의 위치를 실시간으로 추적하여 캐릭터의 상체나 머리가 항상 목표를 향하도록 회전시킬 수 있습니다. 이를 통해 캐릭터가 적을 조준하거나, 특정 대상에게 시선을 유지하는 동작을 만들 수 있습니다.
다중 타겟 제약 설정:

여러 개의 목표(Target)를 설정할 수 있으며, 각 목표에 가중치(weight)를 적용하여 어느 목표를 더 우선시할지 결정할 수 있습니다.


Aim Axis 설정:
캐릭터가 목표를 향해 회전할 때 사용할 축을 설정할 수 있습니다. 일반적으로 X, Y, 또는 Z 축 중 하나를 설정하여 목표를 향하게 합니다. 캐릭터의 상체가 어떤 방향으로 회전할지를 설정할 수 있어 더 유연한 제어가 가능합니다.


Offset 설정:
목표를 바라보는 기본 회전에 오프셋을 설정할 수 있어, 캐릭터가 목표를 정확히 바라보는 대신 살짝 벗어난 각도를 유지하도록 할 수 있습니다. 예를 들어, 캐릭터가 목표를 바로 바라보는 것이 아니라 약간의 회전 차이를 유지하도록 설정할 수 있습니다.


유연한 제어:
Multi-Aim Constraint는 Rig Builder를 통해 여러 개의 제약을 혼합하거나 비활성화할 수 있어, 상황에 따라 유연하게 상체 회전 동작을 관리할 수 있습니다.




▣ Multi-Aim Constraint의 주요 속성

Constrained Object:
제약을 받을 객체를 설정합니다. 보통 캐릭터의 상체나 머리를 이 속성에 설정하여, 해당 부위가 목표를 바라보도록 합니다.

Source Objects (Targets):
캐릭터가 바라볼 목표 대상(타겟)을 설정합니다. 이 목표는 여러 개를 설정할 수 있으며, 목표마다 가중치를 다르게 적용할 수 있습니다. 가중치에 따라 캐릭터가 어떤 목표를 우선시하여 바라볼지 결정됩니다.

Aim Axis:
캐릭터가 회전할 때 사용할 축을 설정합니다. 예를 들어, X, Y, 또는 Z 축을 기준으로 캐릭터가 목표를 바라보도록 할 수 있습니다.
보통 상체는 Y 축 또는 -Y 축을 기준으로 회전하도록 설정하여 자연스러운 상체 회전 동작을 구현할 수 있습니다.

Maintain Offset:
제약이 적용되기 전에 캐릭터가 목표와의 회전 차이를 유지할지 결정하는 옵션입니다. 이 설정을 활성화하면 캐릭터가 목표를 향하더라도 기존의 회전 상태를 유지하면서 약간의 회전 차이를 두고 목표를 바라보게 됩니다.

Weight:
제약의 강도를 조절하는 값입니다. 0일 경우 제약이 전혀 적용되지 않으며, 1일 경우 완전히 제약이 적용되어 캐릭터가 목표를 정확하게 바라보게 됩니다. 이 값을 동적으로 조절하여 상황에 따라 제약의 강도를 변경할 수 있습니다.



▣ Multi-Aim Constraint 사용 시나리오

조준 시스템 구현:
3인칭 슈팅 게임에서 캐릭터가 마우스 커서 또는 게임패드를 조작하여 상체나 머리가 타겟을 바라보도록 만드는 조준 시스템을 구현할 수 있습니다. Multi-Aim Constraint를 통해 캐릭터가 항상 플레이어가 가리키는 방향을 향해 회전하게 할 수 있습니다.


적 NPC 시선 추적:
적 NPC가 플레이어 캐릭터를 추적하고, 플레이어가 이동함에 따라 NPC의 머리가 항상 플레이어를 바라보도록 만들 수 있습니다. Multi-Aim Constraint를 사용하여 NPC의 머리가 목표를 자동으로 향하게 할 수 있습니다.



시선 추적 애니메이션:
캐릭터가 게임 내 특정 물체를 쳐다보는 동작을 만들 때, Multi-Aim Constraint로 머리나 상체가 물체를 향해 회전하도록 할 수 있습니다. 예를 들어, 대화 중에 캐릭터가 상대방을 바라보도록 설정할 수 있습니다.
Multi-Aim Constraint의 장점


자연스러운 회전 제어:
미리 정의된 애니메이션 클립만으로는 표현하기 힘든 실시간 상호작용을 가능하게 해줍니다. 타겟을 바라보는 동작을 정교하게 제어할 수 있어, 보다 자연스러운 애니메이션을 구현할 수 있습니다.


동적 애니메이션:
게임 플레이 도중에 실시간으로 캐릭터의 상체가 목표를 향하도록 하기 때문에, 동적이고 상호작용적인 캐릭터 애니메이션을 쉽게 구현할 수 있습니다.

 

 

 

▣ 코드 설명
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Camera.main: 현재 씬에서 Main Camera 태그가 부여된 카메라를 참조합니다. 주로 1인칭 또는 3인칭 게임에서 시야를 담당하는 카메라입니다.

ScreenPointToRay(Input.mousePosition):
Input.mousePosition은 현재 마우스 포인터의 화면 좌표 (x, y)를 반환합니다.
ScreenPointToRay()는 이 화면 좌표를 기준으로, 해당 좌표를 지나는 카메라의 Ray(광선)을 생성합니다. 이 Ray는 마우스 포인터에서 3D 공간으로 쭉 뻗어나가는 가상의 선입니다.
즉, 이 코드는 마우스 포인터가 가리키는 방향으로 카메라에서 출발하는 Ray를 생성하는 역할을 합니다.

aimTarget.position = ray.GetPoint(10f);
ray.GetPoint(10f):
Ray.GetPoint()는 Ray를 따라 특정 거리만큼 떨어진 지점을 계산해주는 함수입니다.
10f는 Ray의 시작점(카메라 위치)에서 10미터 앞쪽의 지점을 계산하라는 의미입니다.
예를 들어, 카메라에서 마우스가 가리키는 방향으로 10미터 떨어진 지점을 반환하게 됩니다.

aimTarget.position:
aimTarget은 캐릭터가 바라보는 목표를 설정할 때 사용하는 타겟 오브젝트입니다.
이 코드는 aimTarget의 위치를 Ray가 지나가는 방향으로 10미터 떨어진 지점으로 설정합니다.

 

 

 

https://docs.unity3d.com/kr/Packages/com.unity.animation.rigging@0.2/manual/index.html

 

애니메이션 리깅 | Animation Rigging | 0.2.6-preview

애니메이션 리깅 다음 문서는 애니메이션 리깅 패키지 **[com.unity.animation.rigging]**의 설정 프로세스, 제약 정의, 추가 정보에 대해 설명합니다. 애니메이션 리깅이란 ? 사용자는 애니메이션 리깅을

docs.unity3d.com

 

728x90
반응형

댓글