Menu
CoddyTech

점프

Coddy의 Unity 게임: 스카이 레인 코스 레슨. 20개 중 3번째.

이제 러너가 점프합니다. CharacterController에는 자체 중력이 없습니다. 스크립트가 수직 속도를 유지하고 매 프레임 그 속도로 이동시킵니다.

중력은 매 프레임 그 속도를 바꿉니다. 러너가 지면에 서 있을 때(controller.isGrounded)에는 도로에 계속 붙어 있도록 작은 하강 속도 -2를 유지합니다.

if (controller.isGrounded && fallSpeed < 0f) fallSpeed = -2f;
fallSpeed += gravity * Time.deltaTime;

중력 g에서 높이 h에 도달하려면 점프는 속도 Mathf.Sqrt(h * -2f * g)로 시작합니다. 점프 높이가 1.6이고 중력이 -40으로 강하면 러너는 높이 점프한 뒤 빠르게 내려옵니다. 이는 사물이 플레이어를 향해 다가오는 게임에 잘 어울립니다.

bool jump = Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.Space);
if (jump && controller.isGrounded)
{
    fallSpeed = Mathf.Sqrt(jumpHeight * -2f * gravity);
}

이제 이동에는 y 방향 성분도 있습니다. fallSpeed * Time.deltaTime.

challenge icon

챌린지

쉬움
  1. public float jumpHeight = 1.6f;, public float gravity = -40f; 및 private float fallSpeed;를 Runner에 추가하세요.
  2. 레인 키 입력을 처리한 뒤, 점프 키(W, 위쪽 화살표, 스페이스)를 확인하고 controller.isGrounded일 때만 점프하세요.
  3. targetX 앞에 위의 중력 관련 두 줄을 추가하세요.
  4. 이동 값을 new Vector3(x - transform.position.x, fallSpeed * Time.deltaTime, 0f)로 만드세요.

직접 해보기

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 16f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);

        float targetX = lane * laneWidth;
        float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);
        Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
        controller.Move(move);
    }
}

Unity 게임: 스카이 레인의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드