개발일지/Unity

[Unity] 애니메이션 (작성중)

초코보 2026. 6. 2. 14:33

[Animator]

씬에서 게임 오브젝트에 애니메이션을 지정할 때 사용한다.

더보기

[Animation Controller]

상황에 따라 특정 행동을, 어떤 순서로 진행할 것인지 지정한다.

Controller : 해당 Animator을 조종할 AnimationController를 할당한다.

Create - Animation - Animator controller. 폴더를 따로 만들어 보관하자.

Avatar : 조종될 3D모델

Apply Root Motion : 게임 오브젝트의 위치, 회전을 Animation에서 제어할 수 있도록 허용하는 옵션.

(Animation 제작 시 3D 모션의 자세, 물체 위치, 회전 변경을 위한 제작. 해당 글에서는 플레이어 위치를 스크립트로 만들기에 off)

 

[InputSystem]

project - Assets - InputSystem

기존에 사용한 InputManager를 대체하는, 유니티의 새로운 입력 시스템.

Update에서 매프레임마다 입력을 확인하며, 입력 발생 시 이벤트를 발생시켜 처리한다.

단점: 매번 키 입력을 해야 하며, 모바일/콘솔 대응이 불편하다.

 

[2D Vector]

가로/세로를 각각 하나의 축으로 하여, 2차원 입력으로 전달하는 방식

 

[유한 상태 기계 Finite State Machine, FSM]

유한한 개수의 상태(State)를 기반으로 동작하는 컴퓨터 과학 및 수학적 모델.

한 번에 하나의 상태만 활성화되며, 조건에 따라 현 상태에서 다른 상태로 전환된다.

복잡한 조건문과 플래그 변수를 대체하여, 시스템 동작을 단순하고 명확하게 관리할 때 사용된다.

장: 예측가능성(가독성, 쉬운 디버깅), 안정성(한 번에 하나의 상태만 처리, 꼬일 위험 낮음)

단: 확장 한계(요구사항과 상태가 너무 많으면 전이 조건이 복잡해진다)

좀 더 복잡한 AI를 만들 땐 행동트리(BeHaviour Tree)를 활용할 수도 있다.

더보기

 

Empty : 아무 애니메이션 클립도 재생하지 않는 기본 대기 상태(Idle. 숨쉬기 대기 모션)

Blend Tree : 여러 애니메이션을 부드럽게 혼합(Blending)하여 자연스러운 움직임을 만들어내는 기능. 걷기와 뛰기, 캐릭터의 이동 방향에 따른 애니메이션을 자연스레 전환할 때 사용한다.

Motion에 애니메이션을 넣은 상태

 

 애니메이션 클립 우클릭 - Make Transition 후 화살표를 연결할 클립을 선택하여 연결해준다.

 

화살표 선택 시, 다음과 같은 인스펙터가 나온다.

 

Has Exit Time : 상태를 이어주는 옵션. 현재 재생 중인 애니를 끝까지 틀고 다음 애니로 넘어갈지(true), 조건이 충족되는 순간 즉시 끊고 넘어갈 지(false) (switch 역할)

Conditions : 애니메이션 상태가 전환되는 기준. 만족 시 애니메이션이 바뀐다.

해당 이미지의 경우, (int)Equals이 0일 시 전환 발생(1일 시 유지)

Parameters : 상태 제어 스크립트(Conditions 등)에 접근하여 값을 할당하여 상태를 제어하거나 영향을 줄 수 있다.

float: 속도, 체력 등 소수점 포함된 값 비교

int: 카운트, 레벨 등 정수 값 비교

bool: true/false 형태로 상태 체크

trigger: 일회성 이벤트/공격 동작에 사용. 실행 시 자동 초기화

해당 이미지는 대기에서 걷기나 뛰기로, 걷기에서 뛰기나 대기로, 뛰기에서 걷기나 대기로 전환하는 클립이다.

 

이후, Player 부모 오브젝트에 Character Controller 컴포넌트 추가.

Skin Width : 스킨 너비. 콜라이더 걷면에 보이지 않는 미세한 두께(여유 공간)를 만들어 충돌을 매끄럽게 처리하고 떨림 현상을 방지한다.

캐릭터 컨트롤러의 중심점(Center), 반지름(Radius), 높이(Height)도 3D 크기에 맞게 설정해준다.

 

[함께 보면 좋은 내용

더보기

[InputAction]    

Input System 패키지 사용.

구조적이고 유연하게 처리하는 구성요소. 하나의 입력 동작을 표현하는 객체. 행동에 집중한다.

(Action Map, Action, Blinding, Type, Control Type...)

할당된 Input Actions에 따라 메서드가 연결된다.

 

[ .ReadValue<T>() ]

InputAction에서 사용되는 메서드. 입력 값 추출. (<Vector2>, <float> 등)

 

[RotateTowards]

자연스럽고 부드러운 회전을 구현할 때 사용하는 메서드.

목적지를 향해 일정 속도로 각도를  좁혀가며 회전하는 데 사용한다.

 

- Quaternion.RotateTowards (오브젝트 회전)

: 오브젝트가 자신의 방향(기존 회전값)에서 목표 방향으로 지정 속도(각도)만큼 회전

Quaternion.RotateTowards(현 회전값(from), 목표 회전값(to), 최대 회전 각도)

 

- Vector3.RotateTowards (방향 벡터 회전)

: 오브젝트 자체가 아닌, 방향을 나타내는 Vector3 값 자체를 목표 방향으로 서서히 회전

Vector3.RotateTowards(현 방향(current), 목표 방향(target), 최대 반지름, 최대 거리 변화율)

 

[SetInteager]

애니메이터 컴포넌트의 int 파라미터 값을 변경, 애니메이션 상태 전환 시 사용하는 함수

animator.SetInteager("파라미터명", 값);

 

[OnEnable()]

컴포넌트가 활성화 될 때마다 호출되는 생명주기 메서드. 상태 변경 시 필요한 초기화 작업 수행.

Awake와 Start는 최초 1회, OnEnable은 Game object각 active 될 때마다 실행.

순서는 Awake - OnEnable - Start 

 

[OnDisable()]

게임 오브젝트가 비활성화(중단)될 때 호출되는 생명주기 메서드.

활성화(OnEnable)와 비활성화(OnDisable)를 반복할 때마다 매번 호출된다.

주로 이벤트 구독 해제, 리소스 정리, 상태 저장 등에 사용된다.(메모리 누수, 오류 방지, 안전한 중단 등)


[OnAnimatorMove()]

애니메이션 움직임(루트 모션 Root Motion)을 스크립트에서 직접 제어 할 수 있게 하는 생명주기 메서드.

Animator의 Root Motion 옵션 체크 시, 애니메이션 시스템이 트랜스폼을 제어한다.

하지만 해당 메서드 사용 시, 애니메이션 시스템이 제어하지 않고 이동 거리값을 받아 직접 이동 기능을 구현할 수 있다.

미끄러짐 방지, 물리 충돌 처리 등에 사용된다.

Root Motion을 통해 애니메이션이 이동한 거리는 deltaPosition으로 얻을 수 있다.

 

[Physics.gravity]

씬 내 모든 Rigidbody에 작용하는 전역 중력 가속도 값.

 

[squrMagnitude]

벡터 길이(Magnitude)를 제곱한 값을 반환하는 프로퍼티.

크기를 구할 땐 Magnitude를 사용하나, 제곱값이 필요할 땐 sqrMagnitude를 사용한다.

제곱근(루트)계산은 cpu 연산 비용이 많이 들기에, 성능 최적화 시 사용된다.

 

[UnityEvent <>]

using UnityEngine.Events;

유니티에서 제공하는 내장 이벤트 시스템. 유니터 에디터 인스펙터 창에서 드래그 앤 드롭을 통해 이벤트를 쉽게 연결하고 관리할 수 있게 한다.

'개발일지 > Unity' 카테고리의 다른 글

[Unity] Find, Coroutine  (0) 2026.05.28
[Unity]Ray복습, UI, OverLap, Check  (0) 2026.05.27
[Unity] Prefabs, RayCast  (0) 2026.05.26
[Unity]Rigidbody, Collider  (0) 2026.05.26
[Unity]이동, 회전  (0) 2026.05.26