Lintasan
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 49 dari 60.
Bab ini membahas pembuatan platformer 3D. Kamu berlari dan melompat melintasi platform yang melayang, menaiki platform yang meluncur, menyentuh titik periksa agar saat terjatuh kamu tidak kembali ke awal, mengumpulkan permata yang jumlahnya ditampilkan di layar, mencapai garis finis untuk masuk ke level berikutnya, lalu mencoba mengalahkan waktu terbaikmu. Game ini terdiri dari lima skrip yang sudah ada di proyek sejak awal: Player, MovingPlatform, Checkpoint, Gem, dan FinishLine. Empat skrip terakhir masih kosong untuk saat ini, dan setiap pelajaran mengisi salah satunya. Pemain menggunakan CharacterController yang dikendalikan dengan aksi Input System, dan kamera menjadi anaknya, jadi kamera mengikuti pemain tanpa skrip.
CharacterController bergerak dengan dua cara. Move(motion) menggerakkannya sejauh jarak tertentu dan tidak menambahkan apa pun, jadi gravitasi, lompatan, dan Time.deltaTime harus ditangani oleh skrip, seperti di bab Character Controller. SimpleMove(speed) menerima kecepatan dalam satuan per detik, mengalikannya dengan waktu frame itu sendiri, lalu menambahkan gravitasi. Fungsi ini mengabaikan nilai y yang kamu berikan, jadi karakter yang digerakkan dengannya akan jatuh dari tepian, tetapi tidak akan pernah bisa melompat. Anjing gembala dalam game menggiring dari sudut pandang atas ini tidak perlu melompat, jadi SimpleMove dan aksi Move menjadi seluruh isi skripnya:
using UnityEngine;
using UnityEngine.InputSystem;
public class Sheepdog : MonoBehaviour
{
[SerializeField] private float speed = 6f;
private CharacterController controller;
private InputAction moveAction;
void Start()
{
controller = GetComponent<CharacterController>();
moveAction = InputSystem.actions.FindAction("Move");
}
void Update()
{
Vector2 input = moveAction.ReadValue<Vector2>();
controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
}
}Pemain platformer harus bisa melompat, jadi ia menyimpan kecepatan vertikalnya sendiri dan bergerak dengan Move, serta membaca aksi Move dan Jump, bukan class Input. Unity menyarankan satu pemanggilan Move atau SimpleMove per frame: gerakan berjalan dan jatuh digabung dalam pemanggilan yang sama, lalu isGrounded menggambarkan seluruh gerakan itu.
Tantangan
SedangBuat pemain berjalan, melompat, dan jatuh.
- Di
Start(), temukanMovedanJumpdenganInputSystem.actions.FindAction. - Di
Update(), berjalan dengan kecepatanspeed: x dari Move mengikuti x, y-nya mengikuti z. - Tambahkan
gravity * Time.deltaTimekevelocity.y, gunakan-2fsaat berada di tanah dan jatuh. Saat berada di tanah, melompat akan menetapkan nilainya menjadiMathf.Sqrt(jumpHeight * -2f * gravity). - Panggil
controller.Move((move + velocity) * Time.deltaTime)satu kali.
Tekan tombol “Main”: lompat ke platform pertama. Lalu tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
[SerializeField] private float speed = 5f;
[SerializeField] private float jumpHeight = 1.5f;
[SerializeField] private float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
// bergerak dengan aksi Move, melompat dengan aksi Jump, lalu jatuh karena gravitasi
}
}
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 BankLatihan sendiri: Playground Unity