Humanoid Avatars

사람의 형태를 가지고 있다면 휴머노이드 아바타를 이용할 수 있다.


Avatar Definition

  1. Create From This Model : 이미 구성된 다른 아바타에서 아바타정의를 복사한다.


Optimize Game Object : 유니티는 애니메이션을 만들 때 빈 오브젝트를 만들어서 모델의 모든 뼈와 관절을 표현한다.  그러면 모델의 각각 뼈대마다 트랜스폼할 수 있게지만 효율성이 떨어지기 때문에 체크하여 빈 오브젝트 생성을 막는다.


하지만 디테일한 설정을 원한다면 Transform을 드러내야 한다.  ‘+’버튼을 눌러보면 모델의 어떤 부위를 나타낼 껀지 선택할 수 있다.


예를들면 커피를 들고 있는 손을 표현하고 싶다면 오른쪽 손을 찾고.



Configure..버튼을 누른다.




.




모델계층 정의 창

하이라키창에는 모델을 제외하고는 다른 오브젝트는 나오지 않는다.


Mapping / Muscles

Mapping

Mapping : 임포트한 모델 계층의 맵핑으로, 휴머노이드가 어떻게 배치 되어야 하는지를 정의한 것

Muscles

첫 번째는 그룹은 미리보기로 아바타의 움직임을 전체적으로 볼 수 있다.

두 번째 그룹은 신체 부위별로 그룹화 되어있어 근육의 운동 범위를 설정 할 수 있다.

세 번째

Twist 설정은 이웃한 연결 관절에  트위스트가 얼마나 영향을 주는지 결정한다.

Strech 설정은 다른 모델로 이 아바타를 리타겟팅했을 때 뼈대를 얼마나 늘일 수 있는지 결정한다.

Feet Spacing 발사이즈의 기본거리로 걷기 애니메이션등 영향을 줄 수 있다.

출처 : https://www.youtube.com/watch?time_continue=1&v=pbaOGZzth6g



반응형

Animator Sub-state Machine hierarchies



이렇게 복잡한 상태를 하위계층 구조로 나누어 관리할 수가 있다.


생성하기

마우스 오른쪽 클릭 하면 Sub-State Machine를 생성할 수 있다.

일반 상태와 다르게 팔각형 모양인것을 알 수 있다.


하위구조 만들기

이렇게 하위로 넣고 싶은 상태들을 선택 후 집어 넣어주면 된다.


상태 전환 지정하기


참고: https://www.youtube.com/watch?time_continue=1&v=lpekqN4_4xg

반응형

Blend Trees


사람이 뛸때 왼쪽방향으로 돌면서 뛸때(왼쪽으로 조금 숙인다 던지)와 오른쪽 방향으로 돌면서 뛸때 다르다.

유니티에서도 . 디테일한 애니메이션을 주기 위해 사용한다.



애니메이터 창에서 Create State -> From New Blend Tree를 생성한다.

이렇게 생성하면 모션으로서 단일한 애니메이션이 아니라 Blend Tree를 가지게 된다.


생성한 Blend Tree를 클릭해서 들어간다.

인스펙터 창에 Blend Type이 1D라는것은 일차원으로 파라미터(현재는 speed)로 각각의 모션을 얼만큼 재생할지 제어하는 것이다.


모션추가

Add Motition Field를 추가해서 Run 애니메이션을 추가한다.



Threshold : 온전히 이  애니메이션만을 사용하는 블랜드를 나타내는 파라미터 값이다.

ex) speed 값이 걷기가 5이고 달리기가 10이다. speed가 10이 되면 달리기 모션을 취하고 7.5가 되면 걷기와 달리기가  50:50으로 혼합되어 실행 된다.

Time Scale(시계모양) : 애니메이션의 속도를 정한다.

사람모양 : 애니메이션의 반전 여부를 지정한다.



Automate Thresholds를 체크하면 각 애니메이션 임계값 변경이 안된다.

Adjust Time Scale : 각 애니메이션의 속도를 균일하게 만들 수 있다.(루트 모션의 속도와 같아진다)


Blend Type

2D Simple Directional : 방향 파라미터에 기초하여 모션을 블렌딩 각 방향에 애니메이션이 하나 일때 사용한다. ex) 앞으로 걷기, 뒤로 걷기, 왼쪽으로 걷기 등

2D Freeform Directional : 같은 방향에 대해 두 개 이상의 애니메이션을 가질 수 있다.

ex) 앞으로 걷기와 앞으로 달리기 등

2D Freeform Cartesian : 파라미터가 방향과 무관할 때 사용  ex) 속도, 각속


x축을 나타낼 애니메이터 파라미터

y축을 나타낼 애니메이터 파라미터를 각각 생성해서 할당해준다.




빨간점으로 임계값을 주고 밑에 미리보기를 통해 어떻게 반응하는지 알 수 있다.

(빨간점을 마우스로 끌어서 움직이면 방향에 맞는 에니메이션을 취한다)


출처 : https://www.youtube.com/watch?v=HeHvlEYpRbM


반응형

Animator Controller Layers

애니메이터 컨트롤러의 상태 머신들은 레이어로 나눌 수 있다.

예를들어 다른 신체 부위의 움직임을 나타낼때 사용 된다.


IK Pass :  Inverse Kinematics 를 체크 하게 되면 그 레이어에 맞는 인덱스와 함께 OnAnimatorIk 함수가 호출된다.

Base Layer는 0이고 그다음에 추가되는 레이어들은 1부터 증가하는 자연수 인덱스를 가지게된다.


추가 되는 레이어들은 이전 레이어에 반응하는 방식과 관련된 추가 옵션이 있다.

Weight : 레이어가 가지는 가중치 값이 ‘0’이면 애니메이션의 전혀 영향을 주지 않는다.

(애니메이션 우선순위)

Mask : 애니메이션에서 신체의 어떤 부분만 제어할 것인지 AvatorMask 를 등록해 정할 수 있다.

Blending :1) Override : 가중치 낮게 지정된 레이어의 애니메이션을 대체한다.

       2) Additive : 기존 애니메이션의 혼합되거나 더해지는 연산을 취한다.



ex) 캐릭터가 숨을 가쁘게 몰아쉬면서 점점 피곤해지는 레이어를 생각해보자

이 예에서, 숨을 가쁘게 쉬는 애니메이션이 더 낮은 레이어에 할당된 애니메이션에 추가된다. 레이어의 가중치를 높이면 피곤한 애니메이션이 더 뚜렷하게 보일 것이다.


Sync : 동기화 할 레이어를 선택할 수 있다. 그러면 선택한 레이어의 애니메이션과 동일한 상태 머신이 생성되지만 움직임이 없다. 이것은 부상당한 행동 같은 것을 표현 할 때

캐릭터가 건강한 상태와 체력을 잃어가는 과정에 이들을 혼합할 수 있다.


Timing : 동기화된 레이어에 있는 각 애니메이션의 지속 시간을 가중치를 기준으로 결정할 수 있다.


기본있는 BaseLayer에는 Walk 애니메이션을 추가한다.


Walk

(팔과 다리를 움직이게 했다.)


handWave 레이어


wavehand


추가 한 handWave 레이어 설정 값

Weight값은 0.5로 주고

Bleding은 Override로 설정했다.


파라미터 hand를 실행할때 손을 흔드는 모습을 볼 수 있다.

그런데 좌우로만 움직이는게 아니라 앞뒤로도 움직인다.

앞뒤로 움직이는 Base Layer와 좌우로 움직이는 Wavehand 레이어가 섞인 모습을 볼 수 있다.



다음은 Avatar를 통해 걷는 애니메이션과 인사하는 애니메이션 상,하체 따로 진행시키는 방법을 알아보자

반응형

The Animation View






하이라키창에서 움직일 오브젝트를 선택하고



애니메이션 창에서  AddProperty를 필요한 속성을 추가한다.



왼쪽에는 속성과 값을 설정할 수있고 오른쪽에는 원하는 시간대에 설정값을 넣어 애니메이션 만들 수 있다.



첫 번째는 원하는 시간대로 이동

두 번째는 프레임 설정(숫자가 낮으면 느려짐)



  

녹화 버튼을 누르면 빨갛게 변한다. 추가 하고싶은 요소를 추가한다.

현재는 위치와 회전값만 프로퍼티로 추가 했기 때문에 Position과 Rotation만 색이 변한 걸 볼 수 있다.

(녹화 버튼을 누른 상태에 값을 주어야함)


게임신에서 움직여도 되지만 정확한 값을 넣기 위해 인스펙창을 통해 설정한다.






The Animator Component




Controlle : 유니티가 생성한 에셋으로 하나 이상의 상태 머신이 포함되어있다.

상태머신? 씬이 실행될 때 어느 애니메이션이 재생될 것인지 결정한다.

Avater : 3D휴머노이드를 임포트할 때 유니티가 생성하는 에셋이다.

모델과 애니메이터를 이어주는 접착제? 같은 역할이라고 생각하면 된다.


Apply RootMotion : 애니메이션이 게임 오브젝트의 트랜스폼에 영향을 줄 수 있는지 여부를 결정한다.

UnCheck하게 되면 애니메이션은 작동하지만 이동하지는 않는다.



Culling Mode : 렌더링 상태가 아닐때 애니메이션이 재생될 것인지 아닌지를 정할 수 있다.

(비용절약) 화면에 보이지 않으면 애니메이션은 작동하지 않는다.



The Animator Controller


Parameters옆의 + 아이콘을 클릭하면

Float, Int, Bool,Trigger

애니메이션의 퀄리티나 조건을 나타낸다.


Animator Window 살펴보기

애니메이터 창에서 애니메이터컨트롤러 상태를 설정할 수가 있다.


처음 생성된 상태는 기본상태(주황색)로 된다.

(기본을 변경하고 싶으면 원하는 상태에서 마우스 오른쪽 -> Set As Default)


상태 편집은 클릭하면 인스펙터창에서 할 수 있다.

맨위 는 이름과 태그로 코드로 참조 가능하며 어떤 상태에 있는 동안 원하는 동작을 수행하게 할 수 있다.


speed  : 일반 애니메이션 속도의 비해 얼마나 빠르게 재생되는지를 참조

Mirror : 애니메이션의 좌우가 반전

Foot IK : 체크하면 애니메이션이 발 미끄러짐이 감소하거나 제거 된다.

Transitions : 다른 상태로 트랜지션할 수있는 상태를 표시,설정


트랜지션 상태 (흰 화살표)

마우스 오른쪽 -> Make Transitions으로 설정



style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;">트랜지션 상태 설정하기

디버그용

Mute : 현재 상태에 연결된 트랜지션을 비활성화 한다.

Solo : 같은 상태에 연결된 모든 트랜지션을 고려하여 그 중에서 Solo가 표기 되지 않은 모든 트랜지션을 비활성화한다.

Conditions : 설정한 파라미터(bool,Int,flat)를 통해 다른 상태로 이동하는 조건을 설정 할 수 있다.


예를 들어 일정 속도값이 생기면 걷는 동작을 취하도록 하려면

void Update()

{

float h = Input.GetAxis("Horizontal");

anim.SetFloat("speed", v);

}

스크립트 작성후 컴포넌트 해주고


애니메이터윈도우에

파라미터 speed를 생성하고


Idle -> Walk

(스크립트로 제어할것이기 때문에 Has Exit Time 언체크!)

speed값이 0.1이 넘으면 걷기 애니메이션이 작동하도록 설정해준다.  



Walk -> Idle

speed값이 0이면 다시 Idle 상태로 돌아 가기 위해 Less는 ‘0’으로 설정한다.



니메이터 윈도우에 Base Layer를 보면 현재 어떤 상태인지 볼 수있다.

Parameters에서는 키보드 위 방향을 누르면 speed 값이 올라가는 걸 볼 수 있다.

반응형

+ Recent posts