본문 바로가기

지식창고/Unity엔진

Unity5 Mecanim Animation Tutorial - Part9

반응형

Part9. 키보드 좌측 Shift키의 입력을 받아 캐릭터의 걷기, 달리기 모드의 전환. 

 

지금부터는 키보드의 좌측 Shift키 입력을 통하여 캐릭터가 이동할 때 달리면서 이동하게 할지 걸으면서 이동하게 할지를 컨트롤 해줄 수 있도록 해보겠습니다.

 

일단 Animator 탭에서 Walk_Audio노드와 연결되고 있는 2개의 Transition을 삭제해주시고, Parameter형 Bool 변수였던 Walk도 삭제하시기 바랍니다.

 

삭제를 하셨다면, 달리기 애니메이션으로 사용할 파일을 Animator탭으로 드래그 앤 드랍으로 추가하여 주시기

바랍니다.(그림 28-1]

 

[그림 28-1]

달리기 애니메이션을 추가하셨다면 이번에는 Parameter형 Float 변수 2개를 생성하여 각각의 이름을 Walk와 Run으로 변경하여 주시고 Parameter형 Bool 변수 1개를 생성하셔서 moveMode로 변경하여 주시기 바랍니다.(그림 28-2부터 28-5까지)

 

[그림 28-2]

 

[그림 28-3]

 

[그림 28-4]

 

[그림 28-5]

연결을 끊어 주었던 Walk_Audio노드를 다시 각각 Idle노드와 Exit노드로 연결하여 주시기 바랍니다.(그림 29-1)

 

[그림 29-1]

Idle노드와 Walk_Audio노드를 연결하고 있는 Transition을 클릭하여 Has Exit Time의 체크를 해제하여 주시고, Conditions에서 '+'모양을 눌러 새로운 조건을 추가하여 주시기 바랍니다.(그림 29-2, 29-3)

 

[ 그림 29-2]

 

[그림 29-3]

새롭게 추가된 조건을 Girls에서 Walk로 변경하여 주시고, 제일 끝에 0이라는 값을 0.1로 수치를 변경하여

주시기 바랍니다.(그림29-4, 29-5)

 

[그림 29-4]

 

[그림 29-5]

해당 부분이 무엇을 의미하는지에 대해 간단하게 설명드리고 가도록 하겠습니다.

 

'Walk라는 float 변수가 0.1 보다 클 때(Greater)'라고 이해하시면 되겠습니다.

 

Walk를 추가한 후 0.1로 수치를 변경하여 주시고 나서 하나의 조건을 더 추가하도록 하겠습니다.(그림 29-6)

 

[그림 29-6]

이렇게 새로 추가된 조건을 Girls에서 moveMode로 변경하시고 bool 값은 false로 변경하여 주시기 ㅅ바랍니다.(그림 29-7)

 

[그림 29-7]

Walk_Audio노드와 Exit노드를 연결하고 있는 Transition을 클릭하여 Has Exit Time의 체크를 해제하여 주시고 Conditions에서 '+'모양을 눌러 조건을 하나 추가해주도록 하겠습니다.

(그림 29-8, 29-9)

 

[그림 29-8]

 

[그림 29-9]

추가된 조건을 Girls에서 Walk로 변경하여 주시고 이번에는 Greater가 아닌 Less로 변경하신 다음에 마지막 칸의 0의 값은 0.1의 값으로 변경하여 주시기 바랍니다.(그림 29-10)

 

[그림 29-10]

그림 29-10의 Conditions의 부분이 그림 29-5와는 다르다는 것을 눈치채셨을 것인데 이번에는 Walk가 0.1보다 클 때(Greater)가 아닌 Walk가 0.1보다 작을 때(Less) 해당 Transition을 통해 노드를 이동시켜준다고 이해하시면 되겠습니다.

 

이번에는 Idle노드와 Run_Audio노드 간에 Transition으로 연결해주도록 하겠습니다.(그림30-1)

 

[그림 30-1]

해당 Transition을 클릭하여 Inspector 탭에서 Has Exit Time의 체크를 해제하여 주시고, Conditions에서 '+'모양을 눌러 새로운 조건을 추가해주도록 하겠습니다.(그림 30-2, 30-3)

 

[그림 30-2]

 

[그림 30-3]

이렇게 새롭게 추가된 조건을 Grils에서 Run으로 변경하여 주시고 Walk때의 조건과 마찬가지로 0의 값을 0.1로 입력하여 주시기 바랍니다.(그림 30-4)

 

[그림 30-4]

Walk_Audio노드와 Idle노드가 연결된 Transition과 마찬가지로 해당 Transition의 Conditions에서도 조건을 하나 더 추가하여 해당 조건을 Girls에서 moveMode로 변경하여 주도록 하겠습니다. 이 때 해당 조건의 Bool 값은 true로 그대로 두시기 바랍니다.(그림 30-4, 30-5)

 

[그림 30-4]



[그림 30-5]

이번에는 Run_Audio노드와 Exit노드를 연결하고 있는 Transition을 클릭하여 Has Exit Time의 체크를 해제하시고, Conditions에서 '+'버튼을 눌러 새로운 조건을 추가해주도록 하겠습니다.(그림 30-6, 30-7)

 

[그림 30-6]

 

[그림 30-7]

 

이렇게 추가된 조건을 Girls에서 Run으로 변경하여 주시고 Less로 변경하여 0의 값을 0.1값으로 입력하여

주시기 바랍니다.(그림 30-8)

 

[그림 30-8]

그림 30-8부분까지 잘 따라오셨다면 moveController 스크립트를 열어 move()함수부의 if()문을 다음 그림 31-1과 같이 변경하여 주시기 바랍니다.

 

[그림 31-1]

이렇게 코드를 변경하여 주신 다음에 과연 걷기 애니메이션이 구동되면서 캐릭터가 제대로 

움직이는지 확인해보도록 하겠습니다.(그림 31-2)

 

[그림 31-2]

확인을 해보시면 Walk가 Bool형일 때와 마찬가지로 잘되어지고 있습니다.

 

그 이유는 moveOn이라는 float형 변수에 W키와 S키가 눌릴 때 1.0의 값을 떼어졌을 때 0.0의 값을 주고 있으며, 해당 변수의 값을 anim.SetFloat를 통하여 Walk변수에 대입시켜주고 있기 때문에 Transition의 조건에 만족하여 제대로 구동되는 것입니다.

 

이제 걷기 모드와 달리기 모드를 컨트롤 해줄 수 있는 코드를 작성하도록 하겠습니다.

 

다음 그림 32-1과 같이 moveController스크립트를 추가 작성하여 주시기 바랍니다.

 

[그림 32-1]

혹시 몰라 그림을 첨부하였지만, 이렇게 작업하는 이가 작성한 함수를 유니티의 Update()함수부에서 사용하기 위해서는 각 함수의 이름을 Update()함수 안에서 호출을 해와야 사용할 수 있습니다.

 

이 방식은 일반 프로그래밍에서도 사용되어지기 때문에 프로그램공부를 해보신 분들을 제외한 다른 분들을 위하여 간단한 설명 남깁니다.

 

[그림 32-2]

이렇게 추가 작성하신 다음에 스크립트를 저장해주시고 유니티로 돌아와 Play버튼을 눌러보도록 하겠습니다.

 

처음에는 Animator탭에서 moveMode 부분이 체크가 되어있지 않을 것을 확인할 수 있습니다.(그림 33-1)

 

[그림 33-1]

이 때 좌측 Shift를 누르는 순간 Animator탭에서 moveMode의 체크 부분이 체크가 되면서 방향키를 눌러보니 캐릭터가 달리기 애니메이션을 구동함과 동시에 위치가 이동되는 것을 확인하실 수 있을 것입니다.(그림 33-2)

 

[그림 33-2]

이렇게 걷기 모드와 달리기 모드도 변경이 가능하도록 스크립트의 작성이 완료되었습니다. 

 

만약 유니티에서 Play를 끄셨다면 다시 Play버튼을 누르신 다음에 제가 말씀드리는대로 해보시기 바랍니다.

 

걷기 모드이건 달리기 모드이건 상관없이 W,S키 둘 중 하나를 누른 상태에서 좌측 Shift키를 눌러보시기 바랍니다.

 

그럼 어떠한 현상을 보실 수 있나요?

 

분명, 여러분은 좌측 Shift키를 눌러 이동모드를 변경해주도록 스크립트를 짰으며, 현재 Animator 탭의 moveMode는 달리기 상태에서 W,S키를 누른상태에서 좌측 Shift키를 누르셨다면 체크가 해제 되었을 것이며, 걷기 상태에서 W,S키를 누른상태에서 좌측 Shift키를 누르셧다면 체크가 되셨을 겁니다.

 

하지만, 캐릭터는 여전히 기존 걷기 또는 달리기 모션을 사용하며, 이동속도만 변경이 된 상태로 위치가 이동되는 것을 Game뷰에서 확인하실 수 있을 것입니다.

 

어느 게임이 되었건 이동 중에도 달리기 걷기 모드가 자유자재로 컨트롤이 되는 것을 여러분을 알고 계실 것입니다.

 

그렇기에 해당 스크립트도 동일하게 W,S키를 누르고 있어도 원할 때 자유자재로 걷기, 달리기 모드가 변경될 수 있도록 다시 moveController 스크립트를 그림 34-1과 같이 moveMode()함수부를 수정해주도록 하겠습니다.

 

[그림 34-1]

여기에 더불어 Walk 값과 Run의 값 또한 각 모드에 따라 해당 값들이 변경되도록 그림 34-2와 같이 move()함수부를 수정하여 주도록 하겠습니다.

 

[그림34-2]

그림 34-1, 34-2와 같이 코드를 수정하여 주셨다면 유니티로 돌아와 Play를 눌러 테스트하여 보도록하겠습니다.

 

이동모드는 가장 처음에 걷기로 되어있기 때문에 W키나 S키를 누르게 되면, 걷기 애니메이션이 구동될 것 입니다.

 

Animator탭에서 Walk와 Run의 수치가 아까랑은 다르게 Walk만 1.0 Run은 0.0인 것을 확인 하실 수 있을 것입니다.

(그림 35-1) 

 

[그림 35-1]

W키나 S키를 누른 상태에서 이번에는 좌측 Shift키를 눌러보도록 하겠습니다.

 

그럼 Animator탭에서 Walk의 수치는 0.0으로 바뀌면서 Run의 수치가 1.0으로 바뀔 것입니다. 여기에 moveMode에 체크가 되면서 캐릭터가 바로 걷기 애니메이션에서 달리기 애니메이션으로 바뀌는 것 또한 확인하실 수 있을 것입니다.(그림35-2)

 

[그림 35-2]

여기서 끝이 아닌 지난 튜토리얼 때 적용시켜뒀었던 춤모션 또한 moveController를 통하여 애니메이션의 작동이 멈추면서 사운드도 흘러 나오지 않도록 하겠습니다.

 

그림 36-1과 36-2와 같이 W키가 눌렸을 때의 if문과 S키가 눌렸을 때의 if문에 추가 작성 해주시기 바랍니다.

 

[그림 36-1]

 

[그림 36-2]

그림 36-1, 36-2와 같이 작성하셨다면 저장을 하시고 Animator탭으로 오셔서 Girls_Audio노드를 Run_Audio노드와 Walk_Audio노드에 각각 Transition으로 연결하여 주시기 바랍니다.(그림 37-1)

(※연결방법 : Girls_Audio 노드에서 마우스 우클릭 -> Make Transition ->연결할 노드에서 마우스 좌클릭)

 

[그림 37-1]

먼저 Girls_Audio노드와 Run_Audio노드를 연결하고 있는 Transition을 클릭하여 Has Exit Time의 체크를 해제하여 주시기 바랍니다.(그림 37-2)

 

[그림 37-2]

 

 

해당 Transition을 클릭해둔 상태에서 Inspector탭의 Conditions에서 '+'를 눌러 2개의 조건을 추가 하여 주도록 하겠습니다.

 

하나는 Girls를 추가하여 Girls의 bool값을 false로 변경하여 주시고, 또 다른 하나는

Girls를 Run으로 변경하셔서 Greater로 놔두시고 0의 값만 0.1로 변경하여 주시기 바랍니다.

(그림 37-3부터 그림 37-6까지)

 

[그림 37-3]

 

[그림 37-4]

 

[그림 37-5]

 

[그림 37-6]

이번에는 Girls_Audio노드와 Walk_Audio노드를 연결하고 있는 Transition을 클릭하여 Inspector 탭에서 Has Exit Time을 해제하여 주시기 바랍니다.(그림 37-7)

 

[그림 37-7]

해당 Transition을 클릭해둔 상태에서 Inspector탭의 Conditions에서 '+'를 눌러 2개의 조건을 추가하여

주도록 하겠습니다.

 

이번에도 마찬가지로 Girls의 Bool값은 false로 변경하여 주시기 바랍니다.

 

또 다른 하나의 조건은 Girls에서 Walk로 변경하셔서 Greater은 그대로 두시고 0의 값만 0.1로 변경하여

입력하여 주시기 바랍니다.(그림 37-8부터 그림 37-11까지)

 

[그림 37-8]

 

[그림 37-9]

 

[그림 37-10]

 

[그림 37-11]

이렇게 Transition설정이 전부 끝나셨다면 유니티에서 Play버튼을 누르신 다음에 1을 눌렀다가 W키나 S키를 눌러보시면 춤모션이 꺼지는 것을 확인하실 수 있을 것입니다.

 

물론 해당 춤모션과 함께 흘러나오던 사운드도 재생을 멈추게 됩니다.(그림 38-1, 38-2)

 

[그림 38-1]

 

[그림 38-2]

참고로 만약에 A,D키가 눌렸을 때도 모션을 꺼주고 싶으시다면 W,S키가 눌렸을 때 Girls의 값을 False로 바꿔주는 것과 사운드를 재생을 멈춰주는 부분을 moveRot()함수의 각각의 if()문에 추가하여 주시면 되겠습니다.

 

지금까지 제가 작성하여 올려드린 소스는 춤모션중에 A,D키를 눌러도 모션은 꺼지지 않고 캐릭터가 회전할수 있도록 해둔 상태인 것을 알아주시기 바랍니다.

 

이상으로 이번 튜토리얼이었던 캐릭터의 이동과 회전, 걷기모드와 달리기모드 변경에 대하여 다루어 보았습니다.

 

 

반응형