Animation

개발조하·2023년 12월 1일
0

Unity

목록 보기
12/30
post-thumbnail

1. Animation이란?

현재 프로젝트는 UnityChan을 사용하여 학습하고 있다. 받아놓은 UnityChan 에셋을 보면 Animations가 있다. 그 중 하나를 선택하고 Inspector창에서 Animation버튼을 클릭하면 Preview 씬에서 해당 애니메이션을 미리보기할 수 있다. 이때 만약 모델이 없어서 애니메이션이 보이지 않거나, 다른 모델이 뜬다면 아래와 같은 방법으로 UnityChan 모델을 사용한 미리보기를 볼 수 있다. ㄴ Preview씬은 마우스 스크롤을 통해 확대/축소, 마우스R을 누리고 회전하며 볼 수 있다.
이러한 움직임들을 Animation이라고 한다.

현재 Unity에서는 이전까지 사용하던 레거시 방식을 점차 폐지하고, Mecanim Animation으로 병합하여 사용하고 있다.

2. Animator 생성

  • PlayerAnimController 생성
    ㄴ 클릭하면 아래와 같은 Animator탭이 뜬다 ㄴ 조작법: 마우스 스크롤로 확대/축소, 스크롤 누른 상태로 드래그하여 이동

ㄴ 생성해준 PlayerAnimAnimator를 UnityChan의 Animator컴포넌트의 Controller로 넣어주고, 원하는 Animation을 Animator창에 드래그하여 넣어준다. ㄴ 실행해보면 wait 애니메이션이 바로 실행되는 것을 확인할 수 있다.
-> Entry와 연결된 애니메이션이 실행 초기 애니메이션이다!

  • Entry 애니메이션 변경
    ㄴ 원하는 애니메이션에 노드 연결

3. 상태에 따른 Animation 출력

  • PlayerController.cs 수정

3.1 RUN와 WAIT 애니메이션

ㄴ_moveToDest == true; 움직이고 있을 경우 달리는 애니메이션. 멈췄을 경우 WAIT 애니메이션이 출력되도록 함.

3.2 Animation Blending (자연스러운 변환)

지금은 달리다가 딱 멈춰버려서 부자연스럽다. 자연스러운 변환으로 바꿔보자.

  • Blend Tree 만들기
    ㄴ 'WAIT_RUN'이라는 Blend Tree 생성
    ㄴ해당 버튼을 더블클릭하면 새로운 창이 뜬다.
  • WAIT과 RUN 애니메이션 Blending하기
  • PlayerController.cs 수정
    Mathf.Lerp(float a, float b, float t) : a과 b 사이를 t로 선형 보간한다. (자연스러운 블렌딩)
    이제 실행해보면 애니메이션의 파라미터값이 바뀌면서 WAIT과 RUN 애니메이션이 자연스럽게 변환된다.

4. Keyframe Animation

: 애니메이터분들이 만들어준 모션 애니메이션과는 별도로 게임에 종속된 애니메이션 만들기! -> 수동으로 애니메이션 만들기

  • Animaition 창 열기 (ctrl + 6)

  • 원하는 객체 선택 후 Animation 생성

    CubeTest.anim으로 파일 생성
    ㄴ 자동으로 애니메이터와 애니메이션 파일이 생성됨. ㄴ 자동으로 Cube2에 Animator컴포넌트와 Cube2 controller가 삽입되어 있는 것 확인

  • 프로퍼티 추가 및 값 변경
    ㄴ 실행하면 120프레임동안 x좌표가 0 -> 10으로 이동하는 애니메이션이 만들어졌다. ㄴ커브 그래프로도 조절할 수 있다

💡 녹화버튼을 활용해서 실시간으로 씬뷰에서 조절하면서 애니메이션 생성하기

5. Animation Event

연결된 Event를 콜백해줄 수 있도록 Cube2에 컴포넌트를 추가해줘야 한다.

  • CubeEventTest.cs 생성 후 Cube2에 부착
public class CubeEventTest : MonoBehaviour
{
    void TestEventCallback()
    {
        Debug.Log("Event Received!");
 

ㄴ 콜백할 메서드 연결
-> 지정해준 시점에 Event가 발생해서, Debug Log가 찍히는 것을 확인할 수 있다.
(ex. 검이 Enemy를 치는 순간에 event를 걸어서 피 튀기는 효과 혹은 HP 깎기 등의 기능을 구현할 수 있다.)

  • 기존에 있던 애니메이션들도 Event추가가 가능하다

📄 참고자료
[인프런] C#과 유니티로 만드는 MMORPG 게임 개발 시리즈_Animation
Unity Mecanim Animation
Mathf.Lerp()

profile
Unity 개발자 취준생의 개발로그, Slow and steady wins the race !

0개의 댓글