Unity cookbook 10

17
UNITY COOKBOOK SHOT BY. INS PART 10 애애애애애애 애애 # 2

Transcript of Unity cookbook 10

Page 1: Unity cookbook 10

UNITY COOKBOOKSHOT BY. INS

PART 10애니메이션의 기초 # 2

Page 2: Unity cookbook 10

또 다른 애니메이션 기법

Legacy 방식의 애니메이션을 했을 때는 이미 만들어진 애니메이션을 배웠지만이번에는 유니티에서 자체적으로 애니메이션을 만들 수 있는 기능을 살펴봅니다 .애니메이션 적용이 된 현관문을 열고 닫는 기능을 만들어 보는데 일단 위 사진처럼 집과 문을 배치합니다 .

( 1 / 15 )

Page 3: Unity cookbook 10

우리집 현관문 튼튼해 #1

애니메이션을 제작하기 앞서 문의 피봇 위치를 잡아주어야 합니다 .문을 만드셨다면 피봇의 위치가 중앙으로 잡혀있는 것을 확인하실 수 있습니다 .이를 방지하기 위해 ‘ Empty Object’ 를 만들고 문의 경첩이 달려있는 쪽으로 배치한 뒤 문을 Child 시켜올바를 회전이 가능하게끔 만들어야 합니다 .

( 2 / 15 )

# 제대로 열리는 문

Page 4: Unity cookbook 10

우리집 현관문 튼튼해 #2

본격적으로 현관문을 애니메이터화 시켜봅시다 .일단 Door 객체에 ‘ Add Component’ 를 통해 Animator 를 붙여줍니다 . 이후 Window 탭에서 Animation 탭을 클릭하여창을 활성화 시켜줍니다 . 이후 ‘ Hierarchy View’ 에서 ‘ Door’ 객체 부모 (GameObject) 를 클릭 뒤 ‘ Create’ 를 버튼을 눌러‘Door’ 객체에 대한 새로운 애니메이션을 만듭니다 .

( 3 / 15 )

Page 5: Unity cookbook 10

우리집 현관문 튼튼해 #3

‘idle’ 형식의 애니메이션을 만들고 이후 추가적으로 ‘ Create New Clip’ 을 눌러 ‘ open’ 이라는 클립을 하나 더 생성합니다 .빨간색 녹화버튼을 누르는 순간 애니메이션 녹화가 가동 중인 상태입니다 .타임라인에서의 빨간 띠를 1 초 (1:00) 로 옮긴 뒤에 문의 회전을 직접적으로 주게 되면 애니메이션 키 프레임이 녹화되는데이는 0 초 때 닫혀있던 문이 1 초가 되는 과정까지 값이 보간되어 자연스레 열리는 문 애니메이션이 만들어지는 것입니다 .

( 4 / 15 )

# IDLE Animation

Page 6: Unity cookbook 10

우리집 현관문 튼튼해 #4

이후 닫히는 애니메이션을 만들어야 하는데 생각을 잘 해보면 닫히는 애니메이션은 시작점이 열려있는 문의 위치를가져야 합니다 . 이 위치를 기억하기 위해선 열려있는 문의 좌표를 알아야 하는데 , ‘open’ 애니메이션 클립의 1 초 키프레임을보면 열려있는 문의 ‘ Transform‘ 의 위치를 우클릭 하여 ‘ Copy Component’ 를 하게 되면 열려있는 상태의 문 위치를 기억하게 됩니다 .

( 5 / 15 )

Page 7: Unity cookbook 10

우리집 현관문 튼튼해 #5

이제 닫히는 애니메이션을 만들어야 하는데 이전 과정과 똑같이 ‘ Create New Clip’ 을 통해 ‘ Close’ 이름으로 만들고0 프레임 부터 문이 열려있고 , 나중에 갈 수록 닫히는 애니메이션을 제작하기 때문에이전에 복사했던 ‘ Transform’ 을 ‘ Paste Component Values’ 를 통해 위치 자체를 붙여넣기 해줍니다 .이러하여 이전에 복사한 값을 바로 컴포넌트에서 붙여넣기 하나로 수정이 가능합니다 .

( 6 / 15 )

- ‘0’ 프레임부터 열려있는 문 -

Page 8: Unity cookbook 10

우리집 현관문 튼튼해 #6

역시 마찬가지로 녹화 버튼을 누르고 1 초 때에 문을 직접 수정하여 닫히는 위치로 조정하게 되면 애니메이션이 완성됩니다 .이로써 우리는 ‘ idle’, ‘open’, ‘close’ 3 개의 애니메이션을 만들었습니다 .이제 이 애니메이션을 어떻게 조정하고 관리하는지 자세하게 알아보겠습니다 .

( 7 / 15 )

# 문 애니메이션 완성

Page 9: Unity cookbook 10

우리집 현관문 튼튼해 #7

애니메이션의 연계동작은 자동으로 실행되는 것이 아닙니다 . 무언가 제한을 주고 이동할 수 있게 되어있습니다 .‘Parameters’ 탭에서 ‘ +‘ 버튼을 눌러보면 4 개의 자료형을 받는데 이 자료형들로 애니메이션의 제한을 줄 수 있습니다 .‘Bool’ 형식의 자료형을 만들고 ‘ DoorState’ 이름의 값을 하나 만듭니다 .이후 ‘ idle’ 에서 ‘ open’ 으로 넘어가는 트랜젝션에 ‘ DoorState’ 가 ‘ true’ 일때만 받게끔 설정합니다 .

( 8 / 15 )

# 제한이 걸린 애니메이션

Page 10: Unity cookbook 10

우리집 현관문 튼튼해 #8

이후 ‘ open’ 과 ‘ close’ 사이의 트랜잭션에서도 문 상태에 알맞게 boolean 값을 배치해줍니다 .그리고 스크립트를 새로 만들어 위와 같은 코드를 적어봅시다 . ‘E’ 키를 눌렀을 때 Boolean 값을 직접 조정하는 것인데회전 될 문에 스크립트를 직접 부착하고 게임을 실행해보면 문이 열리는 것을 확인하실 수 있습니다 .

( 9 / 15 )

# 열리는 문

Page 11: Unity cookbook 10

우리집 현관문 튼튼해 #9

하지만 문제점이 있습니다 . 애니메이션이 계속 반복해서 실행되는 것입니다 .‘Project View’ 에 가면 우리가 만들었던 애니메이션 파일들이 저장되어 있는 것을 알 수 있습니다 .‘open’, ‘close’ 애니메이션 파일을 클릭하여 ‘ Loop’ 를 체크버튼을 해제하면 반복적인 애니메이션이 수행하지 않습니다 .

( 10 / 15 )

# Loop 해제

Page 12: Unity cookbook 10

우리집 현관문 튼튼해 #10

문제점이 하나 더 있습니다 .‘E’ 키를 누르면 바로 문이 열리고 닫혀야 하는데 , 타이밍이 늦어지는 것을 볼 수 있습니다 .이는 ‘ Animator’ 에서 보면 애니메이션의 흐름이 나오는데 ‘ E’ 키를 눌러도 저 흐름이 끝날 때까지 기다렸다 실행되기 때문입니다 .3 개의 트랜지션에서 ‘ Has Exit Time’ 체크 버튼을 해제하면 흐름을 무시하고 바로 실행되게끔 만들어버립니다 .

( 11 / 15 )

# 즉각적으로 열리는 문

Page 13: Unity cookbook 10

직접참조와 간접참조 #1

지금까지 머리 아픈 애니메이션 제작 과정과 컨트롤 기능에 대해서 알아보았습니다 .저번 편과 같이 이전에 배웠던 기능들을 토대로 응용해 보는 시간을 갖도록 하겠습니다 .캐릭터가 트리거에 위치해 있을 때 ‘ Space’ 키를 누르면 공이 위로 뜨는 상호작용 기능을 제작해보겠습니다 .

( 12 / 15 )

SPACE

Page 14: Unity cookbook 10

직접참조와 간접참조 #2

우선 트리거를 식별하기 위해 발판 위의 네모난 트리거를 배치하고 ‘ Tag’ 에 임의로 ‘ ActionZone’ 이라는 트리거를 배치합니다 .그리고 플레이어 스크립트에서 위와 같이 코드를 추가합니다 . 이는 트리거에 들어갔을 때 ActionZone 태그의 트리거를밟았을 경우 ‘ ActionZone’ 라는 스크립트를 ‘ az’ 변수에 할당하여 받아오고 , ‘az.run’ 으로 직접 참조하여 실행합니다 .

( 13 / 15 )

Page 15: Unity cookbook 10

직접참조와 간접참조 #3

트리거 객체에 붙일 ‘ ActionZone’ 스크립트를 만듭니다 .이 스크립트도 무언가를 할당하여 실행하는데 윗 장에서 ‘ az.Run’ 을 실행하면 간접적으로 Play 라는 함수를 실행시킵니다 .대충 예상하시겠지만 공을 움직이는 함수겠죠 ? 공의 객체를 할당하여 ‘ Play’ 함수로 공을 위로 움직이게끔 구성되어 있습니다 .두 스크립트를 알맞게 배치하여 실행해봅니다 .

( 14 / 15 )

# Trigger Script # Ball Script

Page 16: Unity cookbook 10

직접참조와 간접참조 #4

정리를 해보면 ‘ Player Script’ 는 ‘ Trigger Script’ 를 할당받아 직접 참조로 함수를 실행하고‘Trigger Script’ 는 ‘ Ball Script’ 를 할당받아 간접적으로 실행하게 되어있습니다 .결론은 ‘ Space’ 를 눌렀을 때 과정을 거쳐 공이 위로 뜨게 되는 셈이죠 .이상 애니메이션 메이킹과 참조 응용 편이였습니다 .

( 15 / 15 )

# Trigger Script # Ball Script# Player Script

Page 17: Unity cookbook 10

Thank You !