본문 바로가기
Development/Undead Survivor

2D 셀 애니메이션

by Mobics 2026. 2. 13.

목차


    Undead Survivor

    26.02.13

    캐릭터 방향 전환

    : SpriteRenderer 의 Flip 기능을 활용

    --> 스크립트를 수정하여 구현

     

    ※ LateUpdate : 프레임이 종료되기 전 실행되는 생명주기 함수

     

    >> Player.cs

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.InputSystem;
    
    public class Player : MonoBehaviour
    {
        public Vector2 inputVec;
        public float speed = 3.0f;
    
        private Rigidbody2D rigid;
        private SpriteRenderer spriter;	// 추가
    
        private void Awake()
        {
            rigid = GetComponent<Rigidbody2D>();
            spriter = GetComponent<SpriteRenderer>();	// 추가
        }
    
        private void FixedUpdate()
        {
            Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
            rigid.MovePosition(rigid.position + nextVec);
        }
    
    
        private void LateUpdate()	// 추가
        {
            if (inputVec.x != 0)
            {
                spriter.flipX = inputVec.x < 0;
            }
        }
    
        private void OnMove(InputValue value)
        {
            inputVec = value.Get<Vector2>();
        }
    }

     

    셀 애니메이션

    : 여러 장의 이미지를 순차적으로 보여주는 방식

     

    >> 애니메이션 파일 생성

    : 여러 개의 Sprite 를 모두 선택하여 원하는 오브젝트에 추가

    • Run_Player0
    • Stand_Player0
    • Dead_Player0

    --> 자동으로 오브젝트 이름으로 Animator 생성됨 (이름을 AcPlayer 로 수정)

    --> 자동으로 오브젝트에 Animator 컴포넌트 생성됨

    ※ Animator : 애니메이션을 상태로 관리하는 컴포넌트

     

    >> Animator

    1. Stand 가 기본 상태여야 하므로 Stand 를 기본 상태로 설정

     

    2. 상태들의 이름을 변경

    : 뒤의 '_Player0' 제거

     

    3. Stand와 Run을 서로 Transition으로 연결, Any State에서 Dead로 Transition 연결

     

    4. Parameters 생성 및 설정

     

    5. Animation 전환 설정

    • Has Exit Time : 재생 중이던 Animation이 끝나면 다음 상태로 전환
    • Transition Duration : 3D Animation에서 Animation 전환을 부드럽게 만들어주는 것 --> 셀 애니메이션에서는 최소화해야 한다.

    --> Transition Duration은 0으로 설정해도 됨

    --> Stand → Run, Run Stand, Any State Dead 모두 동일하게 설정

     

    6. Dead Animation Loop 해제

    : Dead Animation은 한번만 재생되면 되므로 Loop를 해제

     

    >> Animation 적용

    : 코드를 작성하여 Animation 적용

    --> Dead 는 나중에 적용

     

    - Player.cs

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.InputSystem;
    
    public class Player : MonoBehaviour
    {
        public Vector2 inputVec;
        public float speed = 3.0f;
    
        private Rigidbody2D rigid;
        private SpriteRenderer spriter;
        private Animator anim;	// 추가
    
        private void Awake()
        {
            rigid = GetComponent<Rigidbody2D>();
            spriter = GetComponent<SpriteRenderer>();
            anim = GetComponent<Animator>();	// 추가
        }
    
        private void FixedUpdate()
        {
            Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
            rigid.MovePosition(rigid.position + nextVec);
        }
    
    
        private void LateUpdate()
        {
            anim.SetFloat("Speed", inputVec.magnitude);	// 추가
            
            if (inputVec.x != 0)
            {
                spriter.flipX = inputVec.x < 0;
            }
        }
    
        private void OnMove(InputValue value)
        {
            inputVec = value.Get<Vector2>();
        }
    }

     

    Animator 재활용

    : 앞서 'AcPlayer'를 만든 것과 동일하게 다른 캐릭터의 'Stand, Run, Dead'에 해당하는 여러 Sprite를 'Player' 오브젝트에 드래그&드랍하여 생성 후, AcPlayer에 새로 생긴 상태는 전부 제거

    --> 이후 Animations 폴더에 'Animator Override Controller' 추가 (이름은 'AcPlayer1')

     

    ※ Animator Override Controller

    : 애니메이션만 덮어 씌우는 에셋

    --> 기존 Animator와 구조는 같되, Animation이 다를 때 사용

     

    >> Player1 세팅

    : 기존 Player를 복붙하여 Animator만 변경

    --> Sprite Renderer를 바꾸지 않아도 게임을 플레이하면 Animator의 Sprite를 따라 자동으로 변하게 된다.

    --> 기존 캐릭터와 구분하기 위해 X 축으로 1 이동

    'Development > Undead Survivor' 카테고리의 다른 글

    오브젝트 풀링으로 소환하기  (0) 2026.03.10
    몬스터 만들기  (0) 2026.02.27
    무한 맵 이동  (0) 2026.02.24
    Input System  (0) 2026.02.10
    오브젝트 추가 및 이동  (0) 2026.02.05