유니티 기초 강좌: 점프 기능 구현

이번 강좌에서는 유니티(Unity)에서 2D 또는 3D 게임 캐릭터의 점프 기능을 구현하는 방법에 대해 알아보겠습니다. 점프는 게임에서 캐릭터의 이동 메커니즘에서 중요한 요소 중 하나이며, 게임의 사용자 경험을 크게 향상시킬 수 있습니다. 기본적인 점프 기능을 구현하고, 물리 엔진과 애니메이션을 통해 좀 더 매끄러운 점프를 구현하는 과정으로 진행하겠습니다.

1. 프로젝트 설정하기

유니티에서 점프 기능을 구현하기 위해 먼저 새로운 프로젝트를 생성해야 합니다. 아래의 단계를 따라 설정해 주세요.

1.1 유니티 설치 및 새 프로젝트 생성

  1. 유니티 허브(Unity Hub)를 실행합니다.
  2. 새로운 프로젝트를 생성하기 위해 ‘New’ 버튼을 클릭합니다.
  3. 2D 또는 3D 템플릿 중 하나를 선택합니다. 본 강좌에서는 3D 템플릿을 사용합니다.
  4. 프로젝트 이름과 저장 경로를 정한 후 ‘Create’ 버튼을 클릭합니다.

1.2 기본 환경 구성

기본 환경을 구성하기 위해 바닥과 캐릭터를 생성하겠습니다.

  • Hierarchy 뷰에서 3D Object를 선택하고 Cube를 선택하여 바닥을 생성합니다.
  • 생성한 큐브의 Transform 컴포넌트를 조정하여 바닥의 크기와 위치를 설정합니다.
  • 마찬가지로 캐릭터를 표현하기 위해 새로운 큐브를 생성하고 적절한 크기로 조정합니다.

2. 점프 스크립트 작성하기

이제 캐릭터의 점프 기능을 구현하기 위해 C# 스크립트를 추가하겠습니다. 아래의 단계에 따라 스크립트를 작성해 주세요.

2.1 스크립트 추가

  1. Project 뷰에서 Assets 폴더를 우클릭하고 Create > C# Script를 선택합니다.
  2. 스크립트의 이름을 PlayerController로 설정합니다.
  3. Hierarchy 뷰에서 캐릭터 큐브를 선택한 후, Inspector 창에서 Add Component를 클릭하고 PlayerController 스크립트를 추가합니다.

2.2 스크립트 내용 작성

이제 PlayerController 스크립트를 열고 아래의 내용을 작성합니다.


using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 5f;
    private bool isGrounded;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent();
    }

    void Update()
    {
        Move();

        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            Jump();
        }
    }

    void Move()
    {
        float moveHorizontally = Input.GetAxis("Horizontal");
        Vector3 movement = new Vector3(moveHorizontally, 0f, 0f) * moveSpeed * Time.deltaTime;
        transform.position += movement;
    }

    void Jump()
    {
        rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        isGrounded = false;
    }

    void OnCollisionEnter(Collision collision)
    {
        if (collision.collider.tag == "Ground")
        {
            isGrounded = true;
        }
    }
}
    

스크립트 설명

위의 스크립트는 캐릭터의 이동과 점프 기능을 포함하고 있습니다. 각 기능의 원리를 살펴보겠습니다:

  • moveSpeed: 캐릭터의 이동 속도를 조정합니다.
  • jumpForce: 캐릭터가 점프할 때의 힘을 조정합니다.
  • isGrounded: 캐릭터가 바닥에 닿아 있는지를 체크합니다.
  • Rigidbody: Unity의 물리 엔진을 활용하여 점프를 구현합니다.
  • Move() 메소드: 수평 방향으로 캐릭터를 이동시킵니다.
  • Jump() 메소드: 점프하는 동작을 수행합니다.
  • OnCollisionEnter() 메소드: 바닥에 닿았는지를 판별합니다.

3. 물리 엔진 적용하기

유니티에서 물리 엔진을 제대로 활용하기 위해, 캐릭터 및 바닥 큐브에 Rigidbody 및 Box Collider를 추가해야 합니다.

3.1 Rigidbody 컴포넌트 추가

  1. 캐릭터 큐브를 선택하고 Add Component 버튼을 클릭합니다.
  2. Rigidbody를 검색하여 추가합니다.
  3. 이제 바닥 큐브에도 같은 방식으로 Box Collider를 추가합니다.

3.2 점프 물리 조정하기

Rigidbody의 MassDrag 값을 조정해 보세요. 이를 통해 점프 시 캐릭터의 무게와 공중에서의 저항력을 선택할 수 있습니다.

팁: 물리적인 움직임을 수정하고 싶다면 Rigidbody의 Gravity Scale 값을 조정해 보세요. 너무 낮게 설정하면 점프 시 부자연스러운 움직임이 발생할 수 있습니다.

4. 점프 애니메이션 추가하기

캐릭터가 점프할 때 애니메이션을 추가하면 비주얼이 더욱 매력적입니다. 아래 단계를 통해 점프 애니메이션을 설정하겠습니다.

4.1 애니메이션 클립 생성 및 설정

  1. Project 뷰에서 Right Click > Create > Animation을 선택하여 새로운 애니메이션 클립을 생성합니다. 이름은 JumpAnimation으로 설정합니다.
  2. 애니메이션 창을 열고 캐릭터 큐브를 선택한 후, 클립에 사용하는 애니메이션을 추가합니다.

4.2 애니메이터 설정

이제 Animator를 설정해 캐릭터의 상태에 따라 점프 애니메이션이 재생되도록 하겠습니다:

  1. Project 뷰에서 Right Click > Create > Animator Controller를 클릭합니다. 이름은 PlayerAnimator로 설정합니다.
  2. Animator Controller를 메인 캐릭터 큐브에 추가합니다.
  3. Animator를 열고 JumpAnimation 클립을 드래그하여 상태에 추가합니다.

4.3 애니메이션 트리거 추가


void Jump()
{
    rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
    isGrounded = false;
    animator.SetTrigger("Jump");
}
    

5. 테스트 및 디버깅

이제 모든 설정을 완료했으므로 Play 버튼을 클릭하여 게임을 테스트합니다. 점프 기능이 정상적으로 작동하는지 확인해 보세요. 점프 애니메이션이 매끄럽게 재생되는지, 캐릭터가 바닥에 닿고 있는지 여부 등을 체크합니다.

5.1 디버깅 팁

  • 캐릭터가 바닥에 닿지 않아서 점프하지 않는 경우, RigidbodyIs Kinematic 속성이 체크되어 있는지 확인합니다.
  • 애니메이션이 재생되지 않을 경우, 애니메이터의 트리거가 올바르게 설정되어 있는지 확인합니다.

6. 결론

이 강좌를 통해 유니티에서 캐릭터의 점프 기능을 구현하는 방법을 배웠습니다. 물리 엔진과 애니메이션 설정을 통해 점프 기능을 향상시키는 방법도 살펴보았습니다. 이후에는 다양한 이동 기능을 추가하거나, 더 복잡한 물리 효과를 시도해 보기 바랍니다. 유니티는 매우 유연한 엔진이므로, 계속해서 새로운 기능을 시도하면서 자신만의 게임을 만들어 나가시기 바랍니다.

7. 추가 학습 자료

더욱 심화된 내용을 학습하고 싶다면 다음 자료들을 추천합니다: