본문 바로가기
유니티/플랫폼 게임 만들기

유니티로 슈퍼마리오 같은 게임 만들기 #6 - 캐릭터 애니메이션 추가하기

by 찡사랑방 2024. 11. 4.
728x90
728x90

 

안녕하세요! 이번 포스팅에서는 유니티 애니메이션을 활용하여 플레이어와 적 캐릭터의 동작에 애니메이션을 추가해보겠습니다. 캐릭터의 이동, 점프, 공격 애니메이션을 추가하면 게임이 한층 더 생동감 있게 느껴질 거예요!

 

 

1. 애니메이션 준비하기

애니메이션 파일 준비:

  • 플레이어와 적 캐릭터의 이동, 점프, 공격에 대한 스프라이트 시트를 준비합니다. 각 동작에 맞는 이미지가 준비되어 있다면 애니메이션 작업을 바로 시작할 수 있습니다. 

유니티 에셋스토어에 올라와 있는 골드메달님의 무료 에셋

 ( 위 에셋 링크 -> https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-pack-188518)

 

Simple 2D Platformer Assets Pack | 2D 캐릭터 | Unity Asset Store

Elevate your workflow with the Simple 2D Platformer Assets Pack asset from Goldmetal. Find this & more 캐릭터 on the Unity Asset Store.

assetstore.unity.com

 

2. 애니메이터 컨트롤러 생성 및 설정

  1. Animator Controller 생성
    • Assets 폴더에서 우클릭하여 Create > Animator Controller를 선택하고, PlayerAnimator라는 이름으로 저장합니다.
    • 이 컨트롤러를 Player 오브젝트에 추가합니다.
  2. 애니메이션 설정
    • PlayerAnimator를 더블 클릭하여 Animator 창을 열고, 애니메이션 상태를 추가합니다.
    • 각각의 상태에 플레이어의 Idle, Run, Jump, Attack 애니메이션을 할당합니다.
  3. 애니메이션 트리거 설정
    • Animator 창의 파라미터(Parameter)에서 Trigger 타입으로 Idle, Run, Jump, Attack 트리거를 만듭니다.
    • 각 상태 사이에 트랜지션(Transition)을 추가하여 애니메이션을 연결합니다.
    • 예를 들어, Idle → Run 트랜지션을 추가하고, 조건으로 Run 트리거를 설정합니다.

 

3. 애니메이션 전환 코드 작성하기

  1. PlayerMovement 스크립트 수정
    • 플레이어의 움직임에 따라 애니메이션이 전환되도록 PlayerMovement 스크립트를 수정해보겠습니다.
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 5f;
    private Rigidbody2D rb;
    private Animator animator;
    private bool isJumping;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        float move = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(move * moveSpeed, rb.velocity.y);

        // 이동 애니메이션 설정
        if (move != 0)
        {
            animator.SetTrigger("Run");
        }
        else
        {
            animator.SetTrigger("Idle");
        }

        // 점프 애니메이션 설정
        if (Input.GetButtonDown("Jump") && !isJumping)
        {
            rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
            animator.SetTrigger("Jump");
            isJumping = true;
        }

        // 공격 애니메이션 설정
        if (Input.GetKeyDown(KeyCode.Z))
        {
            animator.SetTrigger("Attack");
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Ground"))
        {
            isJumping = false;
        }
    }
}

 

 

  • animator.SetTrigger()를 통해 Run, Idle, Jump, Attack 애니메이션을 동작에 따라 전환합니다.
  • isJumping 변수는 플레이어가 점프 중인지 아닌지 확인하는 데 사용됩니다.

 

4. 적 캐릭터의 간단한 애니메이션 추가

  1. EnemyAnimator 컨트롤러 생성
    • Assets 폴더에 EnemyAnimator라는 이름의 새로운 Animator Controller를 생성합니다.
    • Enemy 오브젝트에 추가합니다.
  2. 애니메이션 상태 설정
    • EnemyAnimator의 Animator 창에서 Idle과 Run 상태를 추가하고, 애니메이션 파일을 할당합니다.
    • Player 오브젝트가 감지되면 Run 애니메이션으로 전환되고, 그렇지 않으면 Idle 상태로 유지되도록 설정합니다.
  3. EnemyMovement 스크립트 수정
    • EnemyMovement 스크립트에서 애니메이션 전환 코드를 추가하여 적이 플레이어를 따라갈 때만 이동 애니메이션을 활성화하도록 합니다.
using UnityEngine;

public class EnemyMovement : MonoBehaviour
{
    public float moveSpeed = 2f;
    public Transform player;
    public float chaseRange = 5f;
    private Animator animator;
    private bool isChasing;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        float distanceToPlayer = Vector2.Distance(transform.position, player.position);

        if (distanceToPlayer <= chaseRange)
        {
            isChasing = true;
            transform.position = Vector2.MoveTowards(transform.position, player.position, moveSpeed * Time.deltaTime);
        }
        else
        {
            isChasing = false;
        }

        // 애니메이션 상태 업데이트
        if (isChasing)
        {
            animator.SetTrigger("Run");
        }
        else
        {
            animator.SetTrigger("Idle");
        }
    }
}

 

 

  • isChasing 변수를 통해 플레이어를 추적할 때와 아닐 때 애니메이션이 전환됩니다.

 

5. 애니메이션 테스트 및 조정

  1. Play 모드에서 테스트
    • Play 모드로 전환하여 이동, 점프, 공격 시 애니메이션이 정상적으로 전환되는지 확인하세요.
  2. 애니메이션 속도 조정
    • Animator 창에서 각 애니메이션의 속도를 조정하여, 게임의 속도와 동작에 맞는 자연스러운 애니메이션을 만드세요.
728x90