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.
Tantangan
SedangDua 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 berdasarkanjumpHeightdangravitymasing-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);
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Membangun Game Sungguhan
4Scene dan Level
Muat SceneMulai Ulang LevelLevel BerikutnyaPertahankan Antar-SceneRekap: Pilih Level10Proyek: Platformer 3D
LintasanPlatform Bergerak2Tombol 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 Ganda