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.
Tantangan
SedangBuat satu skrip lompatan yang cocok untuk Kid dan Kangaroo.
- Di
Update(), ganti9fdenganMathf.Sqrt(jumpHeight * -2f * gravity), kecepatan awal yang membuat karakter naik tepat setinggijumpHeight. - Tambahkan
&& controller.isGroundedkeiflompatan 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
2Tombol dan Layar
Tombol dan onClickLambdaMenghubungkan di InspectorPanel Aktif dan NonaktifBilah KesehatanRangkuman: Toko Upgrade5Menyimpan dengan PlayerPrefs
Simpan AngkaMuat dengan Nilai DefaultSkor TertinggiSimpan PengaturanUlasan: Koin di Bank8Pengendali Karakter
CharacterController.MoveGravitasi secara ManualMelompatMendorong BendaBergerak ke Arah PandanganmuUlasan: Lompatan GandaLatihan sendiri: Playground Unity