본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] 2D 캐릭터 점프 구현 (feat. Animator)

by 레오란다 2022. 12. 17.
반응형

유니티에서 점프를 구현하는 방법은 굉장히 다양합니다. 이 글에서는 Animation 기능을 이용해 점프 시 올라 갈 때와 내려올 때의 이미지를 다르게 적용하여 캐릭터의 점프를 구현해 보도록 하겠습니다.

 

이 포스팅을 끝까지 따라하시면 아래와 같은 결과물을 얻으실 수 있습니다.

 

 

▶ 준비 사항

  • 여기를 클릭하시고 이번 글에서 사용할 무료 에셋을 다운로드 받아 Import 해주세요. 위에 보시는 캐릭터 이미지가 포함된 에셋입니다.
  • 플랫폼은 Android, 해상도는 1920x1080 landscape 로 해줍니다.

 

▶ Animation 만들기 - Sprite 지정

  • Projects 창에서 [Assets > SunnyLand Artwork > Sprites > player > idle] 경로에 있는 player-idle-1 을 Hierarchy 창에 드래그 해줍니다. 객체 이름을 Player 로 변경해 줍니다. 스프라이트의 크기가 너무 작기 때문에 Transform 의 Scale 값을 X = 5, Y = 5 로 설정해 줍니다.
  • 유니티 에디터 메뉴의 [Windows > Animation > Animation] 을 선택하여 Animation 창을 열어 줍니다.

  • 우측의 [Create] 버튼을 클릭하면 아래와 같은 창이 나타납니다. 파일 이름을 Jump.anim 으로 하고 [저장] 을 클릭해 주세요.

  • 저장 후 Animation 창에 다음과 같이 Sprite 를 설정해 줍니다.

  • 위의 작업은 타임 라인에 따라 변화할 sprite 를 넣어주는 것입니다.
  • Animation 창에 있는 ▷ 버튼을 클릭하면 Scene 이나 Game 창에서 시간에 따라 sprite 가 변하는 모습을 볼 수 있습니다.

 

▶ Animation 만들기 - transform position 변경

  • 아래의 그림과 같이 Animation 창에 있는 [Add Property] 를 클릭하고 Transform > Position 을 추가해 줍니다.

  • 아래의 그림과 같이 먼저 우측 상단에 30을 입력합니다. 이것은 타임라인상 30 번째 프레임에 해당합니다.
  • Position.y 에 2 를 입력합니다.

이제 ▷ 버튼을 클릭하면 캐릭터가 보기 좋게 제자리에서 점프하는 모습을 볼 수 있습니다. 그런데 이렇게만 하면 제 자리에서 계속해서 점프를 하기 때문에 아직 까지는 점프를 구현했다고 말할 수 없습니다.

 

 

Animator 작업

  • 유니티 에디터 메뉴에서 [Window > Animation > Animator] 를 선택해서 아래와 같이 Animator 창을 열어줍니다.
  • 아래의 상태는 게임이 시작되면 기본 State 인 Jump 가 자동으로 활성화되면서 캐릭터가 계속해서 점프를 뜁니다.

  • 이를 방지하기 위해 먼저 빈 State 한 개를 추가해 주어야 합니다.
  • 우측 빈 공간에서 마우스 우클릭 [Create State > Empty] 를 선택해 주세요. New State 라는 이름의 새로운 State 가 생성됩니다.
  • 새로 만들어진 State 를 선택한 다음 마우스 우클릭 [Set as Layer Default State] 를 선택합니다. 
  • 이제 다시 Play 를 해보시면 캐릭터가 더 이상 점프를 하지 않을 것입니다. Animator 의 기본 State 가 아무것도 하지 않는 New State 가 되었기 때문입니다.
  • Jump 스테이트를 선택하고 우클릭 Make Transition 을 선택한 다음 New State 를 선택합니다. 이 작업은 Jump 애니메이션이 끝나면 다시 New State 로 돌아가게 하는 것입니다. 아래와 같이 나오면 제대로 설정된 것입니다.

 

 

 스크립트 작성

  • 처음에 만든 Player 객체를 선택하고 새로운 스크립트를 추가합니다. 이름은 객체와 동일하게 Player 로 해주세요.
  • Player 스크립트를 다음과 같이 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{   
   Animator anim;
   // Start is called before the first frame update
   void Start()
   {
      anim = GetComponent<Animator>();
   }

   // Update is called once per frame
   void Update()
   {
      if (Input.GetKeyDown(KeyCode.Space))
      {
         // Jump 애니메이션이 현재 play 중인지 체크합니다.         
         if (anim.GetCurrentAnimatorStateInfo(0).IsName("Jump") == false)
            anim.Play("Jump", -1, 0);
      }
   }
}

 

완료되었습니다.

 

지금까지 Animation 과 Animator 를 이용해 캐릭터의 점프를 구현해 봤습니다. Animation 창에서 타임라인에 따라 캐릭터의 position 을 변경한 것처럼 캐릭터가 착지할 때 scale 값에 변화를 주거나 (착지할 때 캐릭터가 살짝 눌리는 효과) 점프 시작 및 착지 이펙트 애니메이션을 추가한다면 조금 더 실감나는 점프를 구현할 수 있을 것입니다.

반응형

댓글