Menu
CoddyTech

Melompat

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 39 dari 56.

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

Dengan gravity disimpan sebagai angka negatif, -20, dan lompatan setinggi 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 angka negatif adalah 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 menguji verticalSpeed < 0f, jadi hanya mengakhiri gerakan jatuh: reset biasa dengan if (controller.isGrounded) setelah baris lompatan akan menimpa kecepatan lompatan pada frame saat melompat. 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 mencapai ketinggian yang berbeda untuk setiap gravitasi.

challenge icon

Tantangan

Sedang

Dua pelompat menjalankan Jumper.cs yang sama: Kid, yang Inspector-nya mengatur gravity ke -18 dan jumpHeight ke 1, serta Kangaroo, dengan gravity -8 dan jumpHeight 4. Tombol Space mengatur verticalSpeed ke 9, angka yang ditemukan melalui coba-coba: angka ini tidak cocok untuk pelompat mana pun, dan juga berfungsi saat di udara. Perbaiki lompatan:

  • Tombol Space memulai lompatan yang naik tepat setinggi jumpHeight, yang dihitung berdasarkan jumpHeight dan gravity masing-masing pelompat.
  • Hanya pelompat yang menyentuh tanah yang bisa melompat.

Tekan Play dan melompatlah, lalu tekan 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);
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Membangun Game Sungguhan