유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

유니티로 졸업프로젝트를 진행하면서 특정 조건에 따라 애니메이션을 바꿔줘야했는데 애니메이션을 바꾼 방법에 대해서 적어보려고 한다. 우선 애니메이션을 변경하기 위해 당연히 애니메이터가 필요하다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

Asset에서 마우스 우클릭으로 애니메이터 컨트롤러를 만들 수 있다. 프로젝트를 할 때 우리는 기존에 존재하는 에셋을 샀기 때문에 필요한 애니메이션만 골라서 컨트롤러에 넣어주었다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

이때 Entry가 처음 시작이고 각 화살표 방향으로 애니메이션이 바뀌게 된다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

저 화살표를 Transition이라고 한다. Transition은 바꾸기 원하는 애니메이션(A)에서 우클릭을 누르고 Make Transition 선택 후 다음 애니메이션(B)을 클릭하면 해당 애니메이션으로의 transition(A->B)이 생긴다.

근데 이때 Transition만 만들게 되면 해당 애니메이션이 한 번만 플레이되고 바로 다음 애니메이션으로 넘어간다. 특정 상황에서만 애니메이션이 바뀌는 것을 원했기 때문에 각 transition에 조건을 추가해주었다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

여기 이 애니메이터 창에서 왼쪽 위 Parameters 창을 눌러준다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

그럼 이런 창이 뜨는데 아무것도 추가해주지 않았다면 목록이 비어있을 것이다. 여기에 원하는 방식의 조건을 추가해줄 수 있다. 오른쪽의 +버튼을 누르면 Float, Int, Bool, Trigger 이렇게 네 가지 항목이 존재한다. 이 넷 중에 조건으로 원하는 것을 선택해주면 되는데 예를 들어, 나는 ButtonPush라는 이름의 Bool parameter를 만들었다. 그리고 이 ButtonPush가 참일 때만 CorgiWalk에서 CorgiEat으로 애니메이션이 바뀌게 설정했다. 이를 확인하기 위해 CorgiWalk에서 CorgiEat으로 가는 transition을 눌러보면 이런 인스펙터 창이 뜬다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo
CorgiWalk에서 CorgiEat으로 가는 transition의 인스펙터

오른쪽에 Conditions 부분에 ButtonPush가 true로 설정된 것을 알 수 있다. 이것은 애니메이터의 ButtonPush라는 parameter가 참일 때만 애니메이션이 바뀐다는 것을 의미한다. 동시에 여러가지 조건을 주고 싶다면 아래에 +버튼을 눌러서 조건을 더 추가해줄 수 있다. 만약 parameter를 float으로 설정한다면 속도가 얼마 이상일 때 애니메이션을 바꾸게하는 등의 설정도 가능하다. 이런 식으로 애니메이터를 세팅해놓으면 실제 코드에서 parameter를 변경해줄 수 있다.

간단한 예시를 위해 코드를 하나 작성했다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

Animator를 코드에 추가해주고 처음 부분에 SetBool 함수를 통해 ButtonPush parameter는 false 상태로 시작할 수 있게 했다. 애니메이터의 다른 파라미터도 마찬가지로 바꿀 수 있다. SetInt, SetFloat 명령어와 parameter명, 값을 넣어주면 해당 parameter가 세팅된다.

이 코드 상에서는 버튼을 누르면 ButtonPush가 true가 되도록 설정했다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

Hierarchy 창에 GameObject를 하나 추가하고 여기에 작성한 코드를 넣어주었다. Corgi와 Button도 넣고 Corgi에는 아까 만들어두었던 Animator를 넣어준다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

버튼의 On Click으로 buttonPush 함수를 넣어줬다.

유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo

처음에는 걷고 있던 강아지가 버튼을 누르면 먹는 모션을 취한다. 이 방식을 사용하여 프로젝트에서는 애니메이션을 컨트롤했다. 그래도 초반 코드가 너무 비효율적인 부분이 있어서 고치고 싶긴 하다... 이 방법만 사용한다고 애니메이션을 원하는 대로 설정할 순 없었어서 조건 설정을 잘해주는게 중요하고 또 애초에 애니메이터를 만들 때부터 효율적으로 만들 수 있는 방법을 생각하고 시뮬레이션을 해본다음에 만들면 더 좋을 것 같다.

반응형

[유니티기초] 유니티강좌 - Trigger(트리거)를 활용하여 엘레베이터 움직이기



유니티 시간에 배웠던건데 혹시 까먹을까봐서

일단 아는대로 급하게 작성을 하도록 하겠습니다.


우선, 이 포스팅은 유니티를 처음 접하시는 분들께서는 잘 모르실 수 있으니,

오른쪽에 유니티 카테고리에서 과거의 유니티관련 포스팅들을 먼저 보시고 접하시면

조금 더 이해가 쉬울 것입니다.



유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


이 강좌는...제 개인 복습용으로 초점이 맞춰져 있기 때문에, 다소 설명이 부족할 수 있습니다.

이점 양해 부탁드리겠습니다 ㅠ_ㅠ


최대한 설명은 해 놓을것입니다.

부디 이 글이 도움이 되기를 바라는 간절한 마음으로 말이지요.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


우선, 엘레베이터의 모델링 파일은 구글링을 통해서 찾고,

기왕이면 애니메이션까지 같이 들어있는 FBX 파일이 좋습니다.

애니메이션이래봐야 위~아래~ 위위아래~ 움직이는 것이 전부죠.


보통은, FBX파일안에는 애니메이션파일이 같이 들어 있기도 하지만,

만약 없다면, 3D맥스에서 애니메이션을 적용시켜 주면 됩니다.


왼쪽에 ElevatorRoot 는 빈 오브젝트에 Box Collider 를 만들었습니다.

이 박스콜리더의 역할은 플레이어가 이 지역에 들어오면, 엘리베이터가 아래로 내려오도록 해주는 역할을 합니다.

따라서, Is Trigger 에 체크가 되어 있어야 합니다.


그리고 TriggerElevator 라는 스크립트를 넣어주었습니다.

자식 오브젝트로, ElevatorPlate / Elevator / bottom / left / right / back 이 있습니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


TriggerElevator 스크립트의 내용입니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


ElevatorPlate 마찬가지로, 빈 오브젝트 입니다. 여기에 박스콜리더 를 적용했구요,

이 충돌체 역할은, 엘리베이터 안에 배치되어 있으며, 플레이어가 들어오면 엘리베이터가 위로 상승을 하게 됩니다.

마찬가지로, Is Trigger 에 체크가 되어 있어야 합니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


TriggerInElevator 의 스크립트 내용입니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


Elevator 는 FBX 모델링 이구요, 엘레베이터 입니다.

애니메이션은 말 그대로 위로 갔다 아래로 갔다 하는 동작이구요,

그 아래의 bottom, left, right, back 은 엘레베이터를 통과 못하게 일종의 벽을 만들어 준 것입니다.

각각 빈 오브젝트에 박스콜리더(충돌체) 를 만든 것이며, 이것은 is Trigger 체크를 풀어줍니다.

그래야 플레이어가 통과를 못하게 벽 역할을 하게 됩니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


박스콜리더는 이렇게 만들어 주는 것이구요~




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


아까 말씀드렸던, 플레이어가 엘레베이터 안에 도착하면, 올라가는 충돌체를 크기와 위치 조절을 해주는 과정입니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


TriggerInElevator 스크립트를 저렇게 드래그해서 넣어줍니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


그리고, ElevatorPlate 에 Ani 변수에 저 움직이는 동작스크립트를 넣어줍니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


아까 말씀드렸던 벽 역할을 하는 충돌체 입니다.




유니티 애니메이션 트리거 - yuniti aenimeisyeon teuligeo


Is Trigger 체크를 풀어야 통과를 못합니다.



자, 오늘의 유니티수업은 여기까지 입니다.

요새 언리얼 쪽에 더 집중을 하다보니;;; 유니티를 살짝 소홀히 하게 되고 있습니다.

하지만, 아주 관심을 끊은 것이 아니니~ 항상 새로운 것을 배우게 되면 그때그때 포스팅을 할 수 있도록 하겠습니다.



공유하기

게시글 관리

구독하기친절한효자손 취미생활

저작자표시 비영리 변경금지