본문 바로가기
게임 엔진 - 유니티/[루키스] 유니티

[유니티 Note] 섹션 7-3

by 묻공러 2025. 7. 5.

# KeyFrame Animation 필요 이유

애니메이터가 제작하는 애니메이션 말고

위치나 회전과 같은 컴포넌트를 활용하여

애니메이션을 직접 제작해 사용해야 하는 경우에 사용된다

 

ex.

나무를 패면 부서진 나무들이 튀면서 떨어지는 애니메이션

, 특정한 이동 패턴으로 도는 새

, TCG 장르에서 카드가 이동 및 회전하는 경우

 

# KeyFrame Animation 생성법

1. Animation 창 켜기

Window > Animation > Animation (단축키는 Ctrl + 6)

 

2. Hierarchy 창에서 객체를 선택한 후 Animation 창에서 Create 버튼 클릭

Create를 클릭하면, Animation 파일과 StateMachine(AnimatiorController) 파일이 생성된다

그리고 선택된 객체에 Animator Component는 자동 추가된다

 

# KeyFrame Animation 사용법

Hierarchy 창에서 객체를 선택한 상태여야 Animation 파일 수정이 가능하다

 

 

- Event와 Key

첫 번째 줄은 Event (1), 두 번째 줄은 Key (2) 관련 생성 및 설정 가능

 

- Add Event 방법 

첫 번째 줄 우클릭 혹은 (3) 클릭을 통해 추가 가능하다

 

- Add Key 방법 

두 번째 줄 우클릭,

더블클릭, 

“좌우로 늘어진 O (4)”클릭 (특정 값만 변경 가능한 Key 생성) 등을 통해 추가 가능하다

 

- Curves (5)

보정되는 수치는 Curves를 통해 변경 가능하다

 

- ◉ 녹화버튼 (6)

직접 Key를 생성해서 값을 하나하나 입력할 수도 있지만

좀 더 쉽게 녹화버튼을 통해

원하는 지점에서 위치, 회전, 스케일링 등을 Scene 창에서 조절해

쉽게 Key를 생성해 KeyFrame Animation을 만들 수 있다

 

# Animation Event Interface

Event 생성 시, Interface가 다르기에 주의해야 한다

 

만약, Hierarchy 창에서 객체 클릭을 해놓지 않은 상태에서 Event를 생성

→ Event Function 직접 Name 작성 가능

 

만약, Hierarchy 창에서 객체 클릭을 해놓은 상태에서 Event를 생성

→ Event Function을 리스트에서 선택해야 함

 

2019.4.40f1 버전 기준으로는

Event Function을 리스트에서 선택하는 Interface만 제공되는 것으로 확인되기에

크게 문제가 되지 않는다

 

# 콜백함수 코드 구현

Animation Event를 생성했다면

콜백함수를 바인드를 해주어야 한다

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimationEventTest : MonoBehaviour
{
    void Start()
    {
        
    }

    void Update()
    {
        
    }

    public void TestEvent()
    {
        Debug.Log($"Event is called");
    }

    public void TestEvent2(int a)
    {
        Debug.Log($"Event is called {a}");
    }
}

 

해당 함수는 접근지정자는 상관없으며

해당 KeyFrame Animation이 작동되는 오브젝트의

C# 클래스 Component 중 하나에서 구현을 하면

툴에서 선택 가능하다

 

 

# 애니메이션 에셋에서 Event 생성 및 활용법

원하는 애니메이션 에셋에 들어가서

아래와 같이 Events 탭을 펼쳐서

“0+”로 Add Event 및 수정이 가능하다

 

# 콜백함수 인자 사용법 및 주의점

툴에서 인자를 보내고 코드에서 활용 가능하다

주의점으로는 

오버로딩 하더라도 버전은 상위버전 단 하나만 사용 가능하다

public void TestEvent()
{
	Debug.Log($"Event is called");
}

public void TestEvent2(int a) // 오버로딩 지원X, 가장 상위 버전 실행
{
	Debug.Log($"Event is called {a}");
}

public void TestEvent2(string str)
{
	Debug.Log($"Event is called {str}");
}

 

 

'게임 엔진 - 유니티 > [루키스] 유니티' 카테고리의 다른 글

[유니티 Note] 섹션 8-2  (3) 2025.07.07
[유니티 Note] 섹션 8-1  (0) 2025.07.07
[유니티 Note] 섹션 7-2  (0) 2025.07.05
[유니티 Note] 섹션 7-1  (0) 2025.07.05
[유니티 Note] 섹션 6-3  (0) 2025.07.02