유니티 기본강좌_8. 애니메이션
큐브를 클릭하고 add component를 눌러서 animation component를 추가해준다.
아직은 animation이 없는 상태이기 때문에, animation을 먼저 만들어준다.
Window> Animation> Animation을 클릭해서 아래와 같이 창을 만들어준다.
이 상태에서 큐브를 선택하고, 창을 옆으로 늘려주면
위와 같은 문구를 확인할 수 있는데, create button을 클릭해준다.
그러면 이런 창이 뜨는데, Assets 폴더 안에 Animation이라는 이름의 새 폴더를 형성해주고, Cube_1이라는 이름의 파일을 하나 생성해준다.
그러면 animation tap이 이렇게 바뀐다. 이것이 바로 우리가 만든 animation folder에 있는 animation을 편집할 수 있는 창이다.
빨간 버튼을 누르고, 30프레임에 흰 선을 가져다 둔 뒤, 큐브를 움직이면 아래 그림과 같이 애니메이터 창이 변하게 되는데(움직인 곳에 동그라미가 생긴것을 확인할 수 있음), 이는 큐브가 움직인 데이터를 보관했다는 의미다.
이렇게 녹화가 된 상태로 play버튼을 눌러보면
유니티 엔진에서 다음과 같이 동작하는 것을 확인할 수 있다.
기본적인 버튼 기능은 다음과 같다. (키프레임은, 흰 선을 의미한다._흰 선이 위치하고 있는 frame)
event의 예시 : 특정 프레임이 실행됨과 동시에 체력을 +10 채워주는 함수를 호출
녹화된 걸 지우고 싶을 때는, 지우고자 하는 것을 클릭한 뒤에 delete key를 눌러주면 된다.
애니메이션 창의 add property 버튼을 클릭하면 다음과 같은 창이 뜬다. 여기서 position을 클릭해주면
이런식으로, position값을 직접 조절해줄 수 있는 창이 뜬다.
이제 본격적으로 animation을 만들어보자!
아래 창에서 1) 빨간 버튼을 클릭하고, 2) 키 프레임을 60 frame으로 옮겨준 뒤, 3) cube의 x position값을 2로 바꿔준다.
다음에, 0 frame을 복사해서, 2 frame에 붙여넣기 해준다.
그러면 아래와 같은 움직임이 자연스럽게 구현된다.
이것보다 더 다양하게 움직임을 주고 싶다면 curves 탭에 들어가면 된다.
탭에 들어가면 다음과 같은 창을 확인할 수 있는데, 빨간색 선: x, 파란색 선: y, 초록색 선: z 라고 생각하면 된다.
그리고 마우스 우클릭을 하면 위와 같은 옵션을 선택할 수 있는데
-Flat: 말그대로 flat
-Free smooth: 우리가 원하는 대로 움직일 수 있음
-Auto: 가장 적절하게 자동적으로 설정됨
-Tangent의 경우에는 보간을 하지 않겠다는 의미다. (움직임이 연속적으로 보여지지 않고 끊어져서 보여짐)
-Both Tangent>Weight : 가중치를 주겠다.
이러한 옵션을 활용하면, 아래와 같이 독특한 움직임을 구현할 수 있다.
다시 옵션을 auto로 바꿔주고 DopeSheet 탭으로 넘어가서 새로운 애니메이션(Cube_2)을 추가해준다. 새로운 애니메이션을 만드는 방식은 위에서 설명한 것과 동일함.
cube_1 애니메이션과는 다르게 cube_2 애니메이션은 y값을 조절해준다. (만드는 방법은 cube_1과 동일 - 아래 그림 참조)
1) 녹화버튼 클릭, 2) 키프레임 60에 가져다두기 3) cube의 y position = 2, y rotation = 2로 설정.
그러면 아래와 같은 움직임이 구현된다.
이렇게 애니메이션을 2개 만든 상태로, cube object의 inspector창을 확인해보면,
이렇게, 만든 animation이 Animation에 들어간 것을 확인할 수 있다.
Animation에 재생할 animation을 넣어주어야한다.
play automatically는 시작하자마자 animation을 play하겠다는 의미이고,
animate Physics는 애니메이션에도 물리효과를 넣겠다는 의미이다.
culling type은 카메라에 보이지 않을 때 animation을 재생할지 말지 결정하는 것이다.
-Always Animate: 카메라에 보이지 않아도 animation을 재생한다.
-Based On Renderers: 카메라에 보이지 않으면 animation을 재생하지 않겠다는 것이다.
우리가 만든 cube_1 animation의 inspector 창에 들어가면 다음과 같이 wrap모드를 설정할 수 있다.
모드의 종류에는
-Once : 한번 실행
-Loop : 계속 실행
-Ping Pong: Loop와는 다르게, Loop는 앞프레임부터 마지막 프레임까지 계속 반복하는 반면에, Ping Pong은 마지막 프레임에 도달하면, 다시 맨앞 프레임으로 돌아간다.
-Clamp Forever: Once는 한 번 재생하고 끝나는데, Clamp Forever는 한 번 재생하고 마지막 프레임에 멈춘 상태로 재생상태를 유지한다.
이렇게 유니티 엔진에서만 animation을 편집하고 실행시키면, object 하나 당 animation 1개밖에 실행할 수 없다. 따라서 지금부터는 script를 이용해서 코드로 animation을 편집해본다.
create>C# script를 클릭해서 아래와 같이 script를 생성해준다. 그리고 실행시켜서 visual studio를 켜준다.
Script 창에서 animation을 제어할 수 있는 옵션은 위에 보이는 것과 같이 다양하다. 이 중에서 Blend를 실행시켜 보자.
(실행 전에 cube object에 animation script를 추가해준다.)
실행해보면, 아래와 같이 실행되는 것을 볼 수 있다.
Cube_1으로 동작하다가, w키를 누른 순간 blend된 animation이 실행되는 것을 확인할 수 있다.
+@ (ani는 위의 코드와 동일한 변수명이라고 생각하면 됨)
ani.Stop(); --> 실행되던 모든 animation이 멈춘다.
ani.wrapMode --> 코드상으로 wrap mode를 바꿔줄 수 있다.
ex. ani.wrapMode = WrapMode.Loop;
animation은 게임 구현에 있어 기본적인 구성요소임으로, 현재 기획중인 프로젝트에서도 많이 활용될 것으로 생각된다.
그리고 이런 animation은 animator로 제어할 수 있다.