symbol
logo
유니티 AI 코딩

유니티 AI 코딩

Unity 코드 생성 AI 모델

작업시작

Input

Prompt

유니티에서 캐릭터가 점프하는 로직은 어떤 방법으로 만들어야해?

Output

생성한 답변이 표시됩니다.

Unity에서 캐릭터 점프를 구현하는 가장 일반적인 방법은 Rigidbody 컴포넌트를 이용한 물리 기반 점프입니다. 아래는 기본적인 구현 예시입니다.

1. 기본 물리 점프 (Rigidbody + AddForce)

csharp

using UnityEngine;

public class PlayerJump : MonoBehaviour
{
    [SerializeField] private float jumpForce = 5f;      // 점프 힘
    [SerializeField] private LayerMask groundLayer;     // 바닥 레이어
    [SerializeField] private Transform groundCheck;     // 바닥 감지 위치
    [SerializeField] private float checkRadius = 0.2f;  // 감지 반경

    private Rigidbody rb;
    private bool isGrounded;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // 바닥 감지 (Physics.CheckSphere)
        isGrounded = Physics.CheckSphere(groundCheck.position, checkRadius, groundLayer);

        // 점프 입력 (스페이스바)
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z); // y속도 초기화
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        }
    }

    // 바닥 감지 범위 시각화 (에디터에서 확인용)
    void OnDrawGizmosSelected()
    {
        if (groundCheck != null)
        {
            Gizmos.color = Color.red;
            Gizmos.DrawWireSphere(groundCheck.position, checkRadius);
        }
    }
}

설정 방법:

  1. 캐릭터 오브젝트에 Rigidbody 컴포넌트 추가
  2. 위 스크립트를 캐릭터에 추가
  3. groundCheck에 캐릭터 발 아래 빈 GameObject를 할당
  4. groundLayer에 바닥 오브젝트의 레이어 지정
  5. jumpForce 값 조절 (보통 5~10 사이)

2. 변형: 중력 커스터마이징 (더 무거운 점프 느낌)

csharp

// Rigidbody의 중력 배율을 조절하거나 직접 중력 적용
[SerializeField] private float gravityMultiplier = 2f;

void FixedUpdate()
{
    // 공중에서 중력 증가 (더 빠르게 떨어짐)
    if (!isGrounded)
    {
        rb.AddForce(Physics.gravity * (gravityMultiplier - 1f), ForceMode.Acceleration);
    }
}

3. 변형: CharacterController 사용 시

CharacterController를 사용한다면 Move()로 직접 속도를 제어합니다.

csharp

public class CharacterJump : MonoBehaviour
{
    private CharacterController controller;
    private Vector3 velocity;
    [SerializeField] private float jumpHeight = 2f;
    [SerializeField] private float gravity = -9.81f;

    void Awake() => controller = GetComponent<CharacterController>();

    void Update()
    {
        if (controller.isGrounded && velocity.y < 0)
            velocity.y = -2f; // 바닥에 붙어있게

        if (Input.GetButtonDown("Jump") && controller.isGrounded)
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); // 점프 속도 계산

        velocity.y += gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);
    }
}

핵심 포인트

  • 바닥 감지Physics.CheckSphere 또는 OnCollisionStay로 구현
  • 점프 힘AddForce(ForceMode.Impulse) 또는 직접 velocity.y 설정
  • 중력은 Rigidbody 기본 중력 또는 직접 계산
  • 공중에서 재점프 방지isGrounded 플래그로 제어

원하는 점프 느낌(가볍게/무겁게, 더블 점프, 변속 점프 등)에 따라 jumpForce, gravityMultiplier, 점프 입력 조건을 조정하면 됩니다.