Lintasan
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 48 dari 56.
Bab ini membangun game platformer 3D. Kamu berlari dan melompat melintasi platform yang melayang, menaiki platform yang meluncur, menyentuh checkpoint agar saat terjatuh kamu tidak kembali ke awal, mengumpulkan permata yang jumlahnya ditampilkan di layar, melewati garis finis menuju 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, dan setiap pelajaran akan mengisi satu skrip. Player menggunakan CharacterController yang dikendalikan oleh action Input System, dan kamera menjadi child-nya, sehingga kamera mengikuti tanpa skrip.
CharacterController bergerak dengan dua cara. Move(motion) menggerakkannya sejauh jarak tertentu tanpa 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 sendiri dengan waktu frame, dan menambahkan gravitasi; cara ini mengabaikan nilai y yang kamu berikan, jadi karakter yang digerakkan dengannya akan jatuh dari tepi, tetapi tidak bisa melompat. Anjing gembala dalam game menggiring domba yang dilihat dari atas ini tidak perlu melompat, jadi SimpleMove dan action 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);
}
}Player dalam game platformer harus bisa melompat, jadi player menyimpan kecepatan vertikalnya sendiri dan bergerak dengan Move, serta membaca action Move dan Jump alih-alih class Input. Unity menyarankan satu pemanggilan Move atau SimpleMove per frame: gerakan berjalan dan jatuh dilakukan dalam pemanggilan yang sama, lalu isGrounded menggambarkan keseluruhan gerakan tersebut.
Tantangan
SedangMulai permainan platformer dengan player. Skrip Player memiliki speed (5), jumpHeight (1.5) dan gravity (-9.81), controller dan velocity untuk jatuh. Temukan aksi Move dan Jump sekali saja, di Start, lalu di Update:
- Move menggerakkan player dengan kecepatan
speedunit per detik: ke kanan dan kiri sepanjang x, maju dan mundur sepanjang z. - Gravitasi menambahkan
gravity * Time.deltaTimekevelocity.ysetiap frame. Saat controller menyentuh tanah danvelocity.ykurang dari 0, aturvelocity.yke -2 terlebih dahulu agar tetap menekan player ke tanah. - Setiap kali Jump ditekan saat player menyentuh tanah, atur
velocity.ykeMathf.Sqrt(jumpHeight * -2f * gravity): lompatan setinggijumpHeightunit. Menahan Jump hanya membuat player melompat sekali, dan player tidak bisa melompat di udara. - Panggil
controller.Movesekali, dengan gerakan berjalan danvelocitydigabungkan, lalu dikalikan denganTime.deltaTime.
Tekan Play dan lompatlah ke platform pertama, lalu tekan Check.
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, jatuh karena gravitasi
}
}
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 Bank