SlideShare a Scribd company logo
1 of 17
UNITY COOKBOOK
SHOT BY. INS
PART 10
애니메이션의 기초 # 2
또 다른 애니메이션 기법
Legacy 방식의 애니메이션을 했을 때는 이미 만들어진 애니메이션을 배웠지만
이번에는 유니티에서 자체적으로 애니메이션을 만들 수 있는 기능을 살펴봅니다.
애니메이션 적용이 된 현관문을 열고 닫는 기능을 만들어 보는데 일단 위 사진처럼 집과 문을 배치합니다.
( 1 / 15 )
우리집 현관문 튼튼해 #1
애니메이션을 제작하기 앞서 문의 피봇 위치를 잡아주어야 합니다.
문을 만드셨다면 피봇의 위치가 중앙으로 잡혀있는 것을 확인하실 수 있습니다.
이를 방지하기 위해 ‘Empty Object’를 만들고 문의 경첩이 달려있는 쪽으로 배치한 뒤 문을 Child 시켜
올바를 회전이 가능하게끔 만들어야 합니다.
( 2 / 15 )
# 제대로 열리는 문
우리집 현관문 튼튼해 #2
본격적으로 현관문을 애니메이터화 시켜봅시다.
일단 Door 객체에 ‘Add Component’를 통해 Animator를 붙여줍니다. 이후 Window 탭에서 Animation 탭을 클릭하여
창을 활성화 시켜줍니다. 이후 ‘Hierarchy View’에서 ‘Door’ 객체 부모(GameObject)를 클릭 뒤 ‘Create’를 버튼을 눌러
‘Door’ 객체에 대한 새로운 애니메이션을 만듭니다.
( 3 / 15 )
우리집 현관문 튼튼해 #3
‘idle’ 형식의 애니메이션을 만들고 이후 추가적으로 ‘Create New Clip’을 눌러 ‘open’ 이라는 클립을 하나 더 생성합니다.
빨간색 녹화버튼을 누르는 순간 애니메이션 녹화가 가동 중인 상태입니다.
타임라인에서의 빨간 띠를 1초 (1:00)로 옮긴 뒤에 문의 회전을 직접적으로 주게 되면 애니메이션 키 프레임이 녹화되는데
이는 0초 때 닫혀있던 문이 1초가 되는 과정까지 값이 보간되어 자연스레 열리는 문 애니메이션이 만들어지는 것입니다.
( 4 / 15 )
# IDLE Animation
우리집 현관문 튼튼해 #4
이후 닫히는 애니메이션을 만들어야 하는데 생각을 잘 해보면 닫히는 애니메이션은 시작점이 열려있는 문의 위치를
가져야 합니다. 이 위치를 기억하기 위해선 열려있는 문의 좌표를 알아야 하는데, ‘open’ 애니메이션 클립의 1초 키프레임을
보면 열려있는 문의 ‘Transform‘의 위치를 우클릭 하여 ‘Copy Component’를 하게 되면
열려있는 상태의 문 위치를 기억하게 됩니다.
( 5 / 15 )
우리집 현관문 튼튼해 #5
이제 닫히는 애니메이션을 만들어야 하는데 이전 과정과 똑같이 ‘Create New Clip’ 을 통해 ‘Close’ 이름으로 만들고
0프레임 부터 문이 열려있고, 나중에 갈 수록 닫히는 애니메이션을 제작하기 때문에
이전에 복사했던 ‘Transform’을 ‘Paste Component Values’를 통해 위치 자체를 붙여넣기 해줍니다.
이러하여 이전에 복사한 값을 바로 컴포넌트에서 붙여넣기 하나로 수정이 가능합니다.
( 6 / 15 )
- ‘0’ 프레임부터 열려있는 문 -
우리집 현관문 튼튼해 #6
역시 마찬가지로 녹화 버튼을 누르고 1초 때에 문을 직접 수정하여 닫히는 위치로 조정하게 되면 애니메이션이 완성됩니다.
이로써 우리는 ‘idle’, ‘open’, ‘close’ 3개의 애니메이션을 만들었습니다.
이제 이 애니메이션을 어떻게 조정하고 관리하는지 자세하게 알아보겠습니다.
( 7 / 15 )
# 문 애니메이션 완성
우리집 현관문 튼튼해 #7
애니메이션의 연계동작은 자동으로 실행되는 것이 아닙니다. 무언가 제한을 주고 이동할 수 있게 되어있습니다.
‘Parameters’ 탭에서 ‘+‘ 버튼을 눌러보면 4개의 자료형을 받는데 이 자료형들로 애니메이션의 제한을 줄 수 있습니다.
‘Bool’ 형식의 자료형을 만들고 ‘DoorState’ 이름의 값을 하나 만듭니다.
이후 ‘idle’에서 ‘open’으로 넘어가는 트랜젝션에 ‘DoorState’가 ‘true’일때만 받게끔 설정합니다.
( 8 / 15 )
# 제한이 걸린 애니메이션
우리집 현관문 튼튼해 #8
이후 ‘open’과 ‘close’ 사이의 트랜잭션에서도 문 상태에 알맞게 boolean 값을 배치해줍니다.
그리고 스크립트를 새로 만들어 위와 같은 코드를 적어봅시다. ‘E’키를 눌렀을 때 Boolean 값을 직접 조정하는 것인데
회전 될 문에 스크립트를 직접 부착하고 게임을 실행해보면 문이 열리는 것을 확인하실 수 있습니다.
( 9 / 15 )
# 열리는 문
우리집 현관문 튼튼해 #9
하지만 문제점이 있습니다. 애니메이션이 계속 반복해서 실행되는 것입니다.
‘Project View’에 가면 우리가 만들었던 애니메이션 파일들이 저장되어 있는 것을 알 수 있습니다.
‘open’, ‘close’ 애니메이션 파일을 클릭하여 ‘Loop’를 체크버튼을 해제하면 반복적인 애니메이션이 수행하지 않습니다.
( 10 / 15 )
# Loop 해제
우리집 현관문 튼튼해 #10
문제점이 하나 더 있습니다.
‘E’키를 누르면 바로 문이 열리고 닫혀야 하는데, 타이밍이 늦어지는 것을 볼 수 있습니다.
이는 ‘Animator’에서 보면 애니메이션의 흐름이 나오는데 ‘E’키를 눌러도 저 흐름이 끝날 때까지 기다렸다 실행되기 때문입니다.
3개의 트랜지션에서 ‘Has Exit Time’ 체크 버튼을 해제하면 흐름을 무시하고 바로 실행되게끔 만들어버립니다.
( 11 / 15 )
# 즉각적으로 열리는 문
직접참조와 간접참조 #1
지금까지 머리 아픈 애니메이션 제작 과정과 컨트롤 기능에 대해서 알아보았습니다.
저번 편과 같이 이전에 배웠던 기능들을 토대로 응용해 보는 시간을 갖도록 하겠습니다.
캐릭터가 트리거에 위치해 있을 때 ‘Space’키를 누르면 공이 위로 뜨는 상호작용 기능을 제작해보겠습니다.
( 12 / 15 )
SPACE
직접참조와 간접참조 #2
우선 트리거를 식별하기 위해 발판 위의 네모난 트리거를 배치하고 ‘Tag’에 임의로 ‘ActionZone’이라는 트리거를 배치합니다.
그리고 플레이어 스크립트에서 위와 같이 코드를 추가합니다. 이는 트리거에 들어갔을 때 ActionZone 태그의 트리거를
밟았을 경우 ‘ActionZone’라는 스크립트를 ‘az’ 변수에 할당하여 받아오고, ‘az.run’으로 직접 참조하여 실행합니다.
( 13 / 15 )
직접참조와 간접참조 #3
트리거 객체에 붙일 ‘ActionZone’ 스크립트를 만듭니다.
이 스크립트도 무언가를 할당하여 실행하는데 윗 장에서 ‘az.Run’을 실행하면 간접적으로 Play라는 함수를 실행시킵니다.
대충 예상하시겠지만 공을 움직이는 함수겠죠? 공의 객체를 할당하여 ‘Play’ 함수로 공을 위로 움직이게끔 구성되어 있습니다.
두 스크립트를 알맞게 배치하여 실행해봅니다.
( 14 / 15 )
# Trigger Script # Ball Script
직접참조와 간접참조 #4
정리를 해보면 ‘Player Script’는 ‘Trigger Script’를 할당받아 직접 참조로 함수를 실행하고
‘Trigger Script’는 ‘Ball Script’를 할당받아 간접적으로 실행하게 되어있습니다.
결론은 ‘Space’를 눌렀을 때 과정을 거쳐 공이 위로 뜨게 되는 셈이죠.
이상 애니메이션 메이킹과 참조 응용 편이였습니다.
( 15 / 15 )
# Trigger Script # Ball Script# Player Script
Thank You !

More Related Content

More from Jihun Soh

Unity cookbook 21
Unity cookbook 21Unity cookbook 21
Unity cookbook 21Jihun Soh
 
Unity cookbook 20
Unity cookbook 20Unity cookbook 20
Unity cookbook 20Jihun Soh
 
Unity cookbook 19
Unity cookbook 19Unity cookbook 19
Unity cookbook 19Jihun Soh
 
Unity cookbook 18
Unity cookbook 18Unity cookbook 18
Unity cookbook 18Jihun Soh
 
Unity cookbook 17
Unity cookbook 17Unity cookbook 17
Unity cookbook 17Jihun Soh
 
Unity cookbook 16
Unity cookbook 16Unity cookbook 16
Unity cookbook 16Jihun Soh
 
Unity cookbook 15
Unity cookbook 15Unity cookbook 15
Unity cookbook 15Jihun Soh
 
Unity cookbook 14
Unity cookbook 14Unity cookbook 14
Unity cookbook 14Jihun Soh
 
Unity cookbook 13
Unity cookbook 13Unity cookbook 13
Unity cookbook 13Jihun Soh
 
Unity cookbook 12
Unity cookbook 12Unity cookbook 12
Unity cookbook 12Jihun Soh
 
Unity cookbook 11
Unity cookbook 11Unity cookbook 11
Unity cookbook 11Jihun Soh
 
Unity cookbook 9
Unity cookbook 9Unity cookbook 9
Unity cookbook 9Jihun Soh
 
Unity cookbook 8
Unity cookbook 8Unity cookbook 8
Unity cookbook 8Jihun Soh
 
Unity cookbook 7
Unity cookbook 7Unity cookbook 7
Unity cookbook 7Jihun Soh
 
Unity cookbook 6
Unity cookbook 6Unity cookbook 6
Unity cookbook 6Jihun Soh
 
Unity cookbook 5
Unity cookbook 5Unity cookbook 5
Unity cookbook 5Jihun Soh
 
Unity cookbook 4
Unity cookbook 4Unity cookbook 4
Unity cookbook 4Jihun Soh
 
Unity cookbook 3
Unity cookbook 3Unity cookbook 3
Unity cookbook 3Jihun Soh
 
Unity cookbook 2
Unity cookbook 2Unity cookbook 2
Unity cookbook 2Jihun Soh
 
Unity cookbook 1
Unity cookbook 1Unity cookbook 1
Unity cookbook 1Jihun Soh
 

More from Jihun Soh (20)

Unity cookbook 21
Unity cookbook 21Unity cookbook 21
Unity cookbook 21
 
Unity cookbook 20
Unity cookbook 20Unity cookbook 20
Unity cookbook 20
 
Unity cookbook 19
Unity cookbook 19Unity cookbook 19
Unity cookbook 19
 
Unity cookbook 18
Unity cookbook 18Unity cookbook 18
Unity cookbook 18
 
Unity cookbook 17
Unity cookbook 17Unity cookbook 17
Unity cookbook 17
 
Unity cookbook 16
Unity cookbook 16Unity cookbook 16
Unity cookbook 16
 
Unity cookbook 15
Unity cookbook 15Unity cookbook 15
Unity cookbook 15
 
Unity cookbook 14
Unity cookbook 14Unity cookbook 14
Unity cookbook 14
 
Unity cookbook 13
Unity cookbook 13Unity cookbook 13
Unity cookbook 13
 
Unity cookbook 12
Unity cookbook 12Unity cookbook 12
Unity cookbook 12
 
Unity cookbook 11
Unity cookbook 11Unity cookbook 11
Unity cookbook 11
 
Unity cookbook 9
Unity cookbook 9Unity cookbook 9
Unity cookbook 9
 
Unity cookbook 8
Unity cookbook 8Unity cookbook 8
Unity cookbook 8
 
Unity cookbook 7
Unity cookbook 7Unity cookbook 7
Unity cookbook 7
 
Unity cookbook 6
Unity cookbook 6Unity cookbook 6
Unity cookbook 6
 
Unity cookbook 5
Unity cookbook 5Unity cookbook 5
Unity cookbook 5
 
Unity cookbook 4
Unity cookbook 4Unity cookbook 4
Unity cookbook 4
 
Unity cookbook 3
Unity cookbook 3Unity cookbook 3
Unity cookbook 3
 
Unity cookbook 2
Unity cookbook 2Unity cookbook 2
Unity cookbook 2
 
Unity cookbook 1
Unity cookbook 1Unity cookbook 1
Unity cookbook 1
 

Unity cookbook 10

  • 1. UNITY COOKBOOK SHOT BY. INS PART 10 애니메이션의 기초 # 2
  • 2. 또 다른 애니메이션 기법 Legacy 방식의 애니메이션을 했을 때는 이미 만들어진 애니메이션을 배웠지만 이번에는 유니티에서 자체적으로 애니메이션을 만들 수 있는 기능을 살펴봅니다. 애니메이션 적용이 된 현관문을 열고 닫는 기능을 만들어 보는데 일단 위 사진처럼 집과 문을 배치합니다. ( 1 / 15 )
  • 3. 우리집 현관문 튼튼해 #1 애니메이션을 제작하기 앞서 문의 피봇 위치를 잡아주어야 합니다. 문을 만드셨다면 피봇의 위치가 중앙으로 잡혀있는 것을 확인하실 수 있습니다. 이를 방지하기 위해 ‘Empty Object’를 만들고 문의 경첩이 달려있는 쪽으로 배치한 뒤 문을 Child 시켜 올바를 회전이 가능하게끔 만들어야 합니다. ( 2 / 15 ) # 제대로 열리는 문
  • 4. 우리집 현관문 튼튼해 #2 본격적으로 현관문을 애니메이터화 시켜봅시다. 일단 Door 객체에 ‘Add Component’를 통해 Animator를 붙여줍니다. 이후 Window 탭에서 Animation 탭을 클릭하여 창을 활성화 시켜줍니다. 이후 ‘Hierarchy View’에서 ‘Door’ 객체 부모(GameObject)를 클릭 뒤 ‘Create’를 버튼을 눌러 ‘Door’ 객체에 대한 새로운 애니메이션을 만듭니다. ( 3 / 15 )
  • 5. 우리집 현관문 튼튼해 #3 ‘idle’ 형식의 애니메이션을 만들고 이후 추가적으로 ‘Create New Clip’을 눌러 ‘open’ 이라는 클립을 하나 더 생성합니다. 빨간색 녹화버튼을 누르는 순간 애니메이션 녹화가 가동 중인 상태입니다. 타임라인에서의 빨간 띠를 1초 (1:00)로 옮긴 뒤에 문의 회전을 직접적으로 주게 되면 애니메이션 키 프레임이 녹화되는데 이는 0초 때 닫혀있던 문이 1초가 되는 과정까지 값이 보간되어 자연스레 열리는 문 애니메이션이 만들어지는 것입니다. ( 4 / 15 ) # IDLE Animation
  • 6. 우리집 현관문 튼튼해 #4 이후 닫히는 애니메이션을 만들어야 하는데 생각을 잘 해보면 닫히는 애니메이션은 시작점이 열려있는 문의 위치를 가져야 합니다. 이 위치를 기억하기 위해선 열려있는 문의 좌표를 알아야 하는데, ‘open’ 애니메이션 클립의 1초 키프레임을 보면 열려있는 문의 ‘Transform‘의 위치를 우클릭 하여 ‘Copy Component’를 하게 되면 열려있는 상태의 문 위치를 기억하게 됩니다. ( 5 / 15 )
  • 7. 우리집 현관문 튼튼해 #5 이제 닫히는 애니메이션을 만들어야 하는데 이전 과정과 똑같이 ‘Create New Clip’ 을 통해 ‘Close’ 이름으로 만들고 0프레임 부터 문이 열려있고, 나중에 갈 수록 닫히는 애니메이션을 제작하기 때문에 이전에 복사했던 ‘Transform’을 ‘Paste Component Values’를 통해 위치 자체를 붙여넣기 해줍니다. 이러하여 이전에 복사한 값을 바로 컴포넌트에서 붙여넣기 하나로 수정이 가능합니다. ( 6 / 15 ) - ‘0’ 프레임부터 열려있는 문 -
  • 8. 우리집 현관문 튼튼해 #6 역시 마찬가지로 녹화 버튼을 누르고 1초 때에 문을 직접 수정하여 닫히는 위치로 조정하게 되면 애니메이션이 완성됩니다. 이로써 우리는 ‘idle’, ‘open’, ‘close’ 3개의 애니메이션을 만들었습니다. 이제 이 애니메이션을 어떻게 조정하고 관리하는지 자세하게 알아보겠습니다. ( 7 / 15 ) # 문 애니메이션 완성
  • 9. 우리집 현관문 튼튼해 #7 애니메이션의 연계동작은 자동으로 실행되는 것이 아닙니다. 무언가 제한을 주고 이동할 수 있게 되어있습니다. ‘Parameters’ 탭에서 ‘+‘ 버튼을 눌러보면 4개의 자료형을 받는데 이 자료형들로 애니메이션의 제한을 줄 수 있습니다. ‘Bool’ 형식의 자료형을 만들고 ‘DoorState’ 이름의 값을 하나 만듭니다. 이후 ‘idle’에서 ‘open’으로 넘어가는 트랜젝션에 ‘DoorState’가 ‘true’일때만 받게끔 설정합니다. ( 8 / 15 ) # 제한이 걸린 애니메이션
  • 10. 우리집 현관문 튼튼해 #8 이후 ‘open’과 ‘close’ 사이의 트랜잭션에서도 문 상태에 알맞게 boolean 값을 배치해줍니다. 그리고 스크립트를 새로 만들어 위와 같은 코드를 적어봅시다. ‘E’키를 눌렀을 때 Boolean 값을 직접 조정하는 것인데 회전 될 문에 스크립트를 직접 부착하고 게임을 실행해보면 문이 열리는 것을 확인하실 수 있습니다. ( 9 / 15 ) # 열리는 문
  • 11. 우리집 현관문 튼튼해 #9 하지만 문제점이 있습니다. 애니메이션이 계속 반복해서 실행되는 것입니다. ‘Project View’에 가면 우리가 만들었던 애니메이션 파일들이 저장되어 있는 것을 알 수 있습니다. ‘open’, ‘close’ 애니메이션 파일을 클릭하여 ‘Loop’를 체크버튼을 해제하면 반복적인 애니메이션이 수행하지 않습니다. ( 10 / 15 ) # Loop 해제
  • 12. 우리집 현관문 튼튼해 #10 문제점이 하나 더 있습니다. ‘E’키를 누르면 바로 문이 열리고 닫혀야 하는데, 타이밍이 늦어지는 것을 볼 수 있습니다. 이는 ‘Animator’에서 보면 애니메이션의 흐름이 나오는데 ‘E’키를 눌러도 저 흐름이 끝날 때까지 기다렸다 실행되기 때문입니다. 3개의 트랜지션에서 ‘Has Exit Time’ 체크 버튼을 해제하면 흐름을 무시하고 바로 실행되게끔 만들어버립니다. ( 11 / 15 ) # 즉각적으로 열리는 문
  • 13. 직접참조와 간접참조 #1 지금까지 머리 아픈 애니메이션 제작 과정과 컨트롤 기능에 대해서 알아보았습니다. 저번 편과 같이 이전에 배웠던 기능들을 토대로 응용해 보는 시간을 갖도록 하겠습니다. 캐릭터가 트리거에 위치해 있을 때 ‘Space’키를 누르면 공이 위로 뜨는 상호작용 기능을 제작해보겠습니다. ( 12 / 15 ) SPACE
  • 14. 직접참조와 간접참조 #2 우선 트리거를 식별하기 위해 발판 위의 네모난 트리거를 배치하고 ‘Tag’에 임의로 ‘ActionZone’이라는 트리거를 배치합니다. 그리고 플레이어 스크립트에서 위와 같이 코드를 추가합니다. 이는 트리거에 들어갔을 때 ActionZone 태그의 트리거를 밟았을 경우 ‘ActionZone’라는 스크립트를 ‘az’ 변수에 할당하여 받아오고, ‘az.run’으로 직접 참조하여 실행합니다. ( 13 / 15 )
  • 15. 직접참조와 간접참조 #3 트리거 객체에 붙일 ‘ActionZone’ 스크립트를 만듭니다. 이 스크립트도 무언가를 할당하여 실행하는데 윗 장에서 ‘az.Run’을 실행하면 간접적으로 Play라는 함수를 실행시킵니다. 대충 예상하시겠지만 공을 움직이는 함수겠죠? 공의 객체를 할당하여 ‘Play’ 함수로 공을 위로 움직이게끔 구성되어 있습니다. 두 스크립트를 알맞게 배치하여 실행해봅니다. ( 14 / 15 ) # Trigger Script # Ball Script
  • 16. 직접참조와 간접참조 #4 정리를 해보면 ‘Player Script’는 ‘Trigger Script’를 할당받아 직접 참조로 함수를 실행하고 ‘Trigger Script’는 ‘Ball Script’를 할당받아 간접적으로 실행하게 되어있습니다. 결론은 ‘Space’를 눌렀을 때 과정을 거쳐 공이 위로 뜨게 되는 셈이죠. 이상 애니메이션 메이킹과 참조 응용 편이였습니다. ( 15 / 15 ) # Trigger Script # Ball Script# Player Script