[유니티] 애니메이션 Unity Animation

안녕하세요 UnityBeginner입니다.
이번 글에선 오브젝트의 애니메이션에 대해서 알아보겠습니다.

먼저 애니메이션을 동작시킬 오브젝트를 생성해줍니다.
Canvas Image와, UI Button 을 이용하여 다음과 같이 화면을 구성해보았습니다.



이번 글에 사용된 이미지들입니다.



서있는 이미지 ( Idle )



우측이동 이미지 ( righrMove )



좌측이동 이미지 ( leftMove )



Animation 생성



졸라맨이 그려진 오브젝트를 선택하고 
Animation 탭으로 이동하여 애니메이션을 생성해줍니다.

애니메이션 생성 시 1개의 Animator controller와 1개의 Animation clip이 
생성되며 controller의 명칭은 오브젝트 명칭과 동일하게 만들어지고 clip은 
생성할 때 입력받은 이름으로 지정되어집니다.

애니메이션 클립

animation 안에 포함된 각각의 독립적인 모션을 가르킵니다.
(ex 이동, 공격, 점프, 대쉬)

애니메이터 컨트롤러

컨트롤러는 각각의 클립들이 어떤식으로 연결되어있고 어떠한 조건으로 실행되는지를 제어하고 확인하는 기능을 가지고있습니다.
(ex 이동 애니메이션 상태에서 space버튼 클릭시 공격으로 애니메이션으로 전환)



추가된 Animator 컴포넌트


해당 동작을 수행하셨다면 오브젝트에 animator 컴포넌트가 추가되어집니다.



Animation Clip 생성


애니메이션 탭으로 돌아와 생성된 클립을 확인하고 추가적으로 
LeftMove, RightMove 2개의 클립을 추가 생성합니다.
(애니메이션 클립은 각각의 애니메이션 모션을 뜻합니다.)



Animation 타임라인 편집


클립을 생성했다면 클립의 모션을 표현하기 위해 프로젝트 폴더안의 
스프라이트 이미지들을 드래그하여 추가하고 preview 우측의 재생버튼을 
이용하여 모션을 확인합니다.
※ 애니메이션 재생시 GameView 에서 확인 가능합니다.

위와같은 방식으로 LeftMove, RightMove Clip에 
이미지를 추가하여 모션을 완성시켜줍니다.

(모션에는 타임라인에 따라 이미지 변화, 크기조정, 위치조정등 

다양한 방식을 이용하여 편집이 가능합니다.)



Animator


애니메이터 탭에선 이전에 추가 된 클립들을 확인할 수 있으며 
조건을 부여하여 모션과 모션을 이동을 제어하는 부분입니다.


Animator Make Transition



이제 애니메이션의 Make Transition을 선택하고 
LeftMove, RightMove를 각각 연결해줍니다. 

이동작으로 인해 특정조건을 수행한경우 
Idle > LeftMove로 또는 Idle 에서 RightMove로 애니메이션이 전환됩니다.


Animator Parametors



Trangision을 설정했다면 해당 동작을 조건을 부여하기 위한
Bool parameter를 다음과 같이 생성합니다.

※ 파라메터를 설정하는 부분입니다.


Animator Transition Parameter설정


이제 연결시킨 트랜지션 선을 선택하면 다음과 같이 인스펙터에 표시됩니다.
conditions의 +기호를 이용하여 생성해두었던 parameter를 설정해줍니다.

Idle에서 left Walk로 연결된 트랜지션 (LeftMove, true)
left Walk에서 > Idle로 연결된 트랜지션 (LeftMove, false)

Idle에서 > right Walk로 연결된 트랜지션 (RightMove, true)
right Walk에서 >  Idle로 연결된 트랜지션 (RightMove, false)



속성값들

Has Exit Time

트랜지션 조건이 언제든지 효력을 발할 수 있게 할 것인지, 스테이트의 exit 
시간 사이에만 효력을 발할 수 있게 할 것인지를 설정합니다.

Exit Time

“Has Exit Time”이 활성화되어 있는 경우, 이 값은 조건이 효력을 발할 수 있게 
될 때까지의 시간을 나타냅니다. 이것은 정규화된 시간(normalised time)으로 
표시됩니다. 

예를 들어 exit 타임이 0.75이면 현재 상태의 재생이 75%보다 더 완료된 것이며, 
그리고 해당 트랜지션 조건을 만나게 됩니다.

Fixed Duration

선택하면 전환 시간이 초 단위로 해석된다. Fixed Duration 선택하지 않으면 
전환 시간은 소스 상태의 정규화된 시간의 일부로 해석된다.

Transition Offset

트랜지션되는 목적지 스테이트의 재생이 시작되는 시점의 오프셋. 
예를 들어, 0.5로 하면 목적지 스테이트는 해당 타임 라인의 50% 시점에서 
재생되기 시작합니다.

Interrupt Source

트랜지션을 중단할 수 있는 조건을 지정할 수 있습니다.



스크립트 


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
private Animator anim;

    private void Start() {
        anim = GetComponent<Animator>();
    }

    public void LeftWalkBtn() {
        anim.SetBool("LeftMove", true);
        anim.SetBool("RightMove", false);
    }

    public void RightWalkBtn() {
        anim.SetBool("RightMove", true);
        anim.SetBool("LeftMove", false);
    }

    public void IdleBtn() {
        anim.SetBool("LeftMove", false);
        anim.SetBool("RightMove", false);
    }

Animator에 Transition에 설정된 parameter를 값을 이용하여 
버튼클릭시 애니메이션을 전환시키는 코드입니다.


결과화면



각 버튼으로 파라미터 값의 변화를 주었고 트랜지션에  
설정된 조건과 일치하면 애니메이션이 변환되는 과정을 살펴보았습니다.

댓글