본문 바로가기

▶Programming/Unity

Animator


상태를 저장하고 싶다...다시 말하면 정지상태, 이동상태, 공격상태 등..FSM처럼 만들어서 쓰고 싶을 경우..

HashTable을 이용하듯 사용 할 수 있는 방법이 있다.

Animator.StringToHash(레이어이름.상태이름(idle,jump 등)) <<이런식으로 사용 하면 된다.

이렇게 가져온 idle이나 jump,move 등의 움직임은 반환형이 int형이다.

따라서 아래와 같이 상태(idle,jump,move)를 int로 저장한 후 FSM처럼 쓰면 된다.

static int idleState = Animator.StringToHash("Base Layer.Idle");



1
2
private Animator anim;
anim.layerCount==3;
anim.SetLayerWeight(2,1);
cs

위와 같이 애니메이터를 anim으로 선언한 후 layerCount를 사용하면 Animator에 레이어 개수를 알 수 있다.

그리고 SetLayerWeight(index, 가중치)는 레이어의 가중치를 설정 할 수 있다. index는 위의 그림에 나온 순서대로 0,1,2 이다.

쉽게 얘기해서 Base Layer는 index가 0 이고 Layer2는 index가 1 이다. 가중치는 0~1 사이의 값이다.

가중치를 쉽게 설명하면 예를들어 걸으면서 총을 쏘는 장면을 상상해 보자. 그러면 걸을 때의 가중치를 1을 주면 총을 쏘는 애니메이션은 진행되지 않는다.

그런데 걷는 가중치를 0.7을 주고, 총 쏘는 가중치를 0.3을 주면(안 줘도 된다. 1(가중치)을 기준으로 처음 애니메이션이 0.7을 쓰면 나머지가 0.3을 쓰는 원리)걸으면서 총을 쏜다. 한마디로 애니메이션의 동작 가중치.