Menu
CoddyTech

Melompat

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 40 dari 60.

Lompatan menggunakan kecepatan vertikal yang ditetapkan sekali, saat Space ditekan. Gravitasi yang sudah ditambahkan skrip kemudian memperlambat gerakan naik, menghentikannya di titik tertinggi, lalu membawa pengendali turun kembali. Yang perlu ditentukan adalah kecepatan awal untuk mencapai ketinggian tertentu. Gravitasi mengurangi kecepatan dengan laju tetap, jadi lompatan yang dimulai dengan kecepatan v naik sejauh v * v / (2 * g) unit sebelum berhenti. Jika rumusnya dibalik, kecepatan awal untuk mencapai ketinggian h adalah v = √(2 * g * h).

Jika gravity disimpan sebagai bilangan negatif, -20, dan tinggi lompatan 2.5 unit, perhitungannya adalah Mathf.Sqrt(2.5f * -2f * -20f), yaitu akar kuadrat dari 100: 10 unit per detik. -2f mengubah gravitasi negatif menjadi positif, karena akar kuadrat dari bilangan negatif menghasilkan NaN:

if (controller.isGrounded && verticalSpeed < 0f)
{
    verticalSpeed = -2f;
}
if (Input.GetButtonDown("Jump") && controller.isGrounded)
{
    verticalSpeed = Mathf.Sqrt(jumpHeight * -2f * gravity);
}
verticalSpeed += gravity * Time.deltaTime;

Pemeriksaan reset menggunakan verticalSpeed < 0f, jadi reset hanya mengakhiri gerakan jatuh. Reset biasa dengan if (controller.isGrounded) setelah baris lompatan akan menimpa kecepatan lompatan pada frame saat lompatan terjadi. Pemeriksaan controller.isGrounded pada lompatan mencegah lompatan di udara. Ubah jumpHeight atau gravity di Inspector, dan lompatan tetap mencapai tepat jumpHeight, sedangkan kecepatan tetap seperti verticalSpeed = 8f menghasilkan ketinggian berbeda untuk setiap gravitasi.

challenge icon

Tantangan

Sedang

Buat satu skrip lompatan yang cocok untuk Kid dan Kangaroo.

  1. Di Update(), ganti 9f dengan Mathf.Sqrt(jumpHeight * -2f * gravity), kecepatan awal yang membuat karakter naik tepat setinggi jumpHeight.
  2. Tambahkan && controller.isGrounded ke if lompatan agar karakter tidak bisa melompat di udara.

Tekan tombol “Main” lalu tekan Space: Kid naik 1 unit dan Kangaroo naik 4 unit. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;

public class Jumper : MonoBehaviour
{
    public float speed = 5f;
    public float gravity = -18f;
    public float jumpHeight = 1f;

    CharacterController controller;
    float verticalSpeed;

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

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        if (Input.GetButtonDown("Jump"))
        {
            verticalSpeed = 9f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}

Semua pelajaran di Membangun Game Sungguhan

Latihan sendiri: Playground Unity