Bergerak ke Arah Pandanganmu
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 41 dari 56.
Saat kamera melihat pemain dari suatu sudut, tombol panah seharusnya menggerakkan pemain sesuai tampilan layar: tombol atas membuat pemain berjalan menjauh dari kamera, tombol kanan membuat pemain berjalan ke arah kanan kamera. Sumbu dunia hanya menghasilkan gerakan seperti itu saat kamera melihat sepanjang +z. Jadi, susun gerakan dari arah kamera sendiri, cam.forward dan cam.right.
Arah tersebut perlu dibersihkan terlebih dahulu. Kamera yang melihat ke bawah ke arah pemain memiliki forward yang mengarah ke tanah, jadi atur y-nya ke 0 agar hanya bagian yang sejajar dengan tanah yang tersisa. Arah yang tersisa lebih pendek dari 1, sekitar 0.87 untuk kamera yang dimiringkan ke bawah 30 derajat, sehingga pemain akan berjalan lebih lambat. Jadi, normalkan arah tersebut. Pengendali gerak ini mengikuti kamera utama, yang melihat ke arah sudut level:
Transform cam = Camera.main.transform;
Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();
Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize(); // gerakan diagonal tidak lebih cepat
controller.Move(move * speed * Time.deltaTime);Camera.main adalah kamera yang diberi tag MainCamera. Kedua arah dibaca setiap frame, sehingga kontrol tetap tepat saat kamera berputar. Menekan tombol atas dan kanan secara bersamaan menjumlahkan dua vektor satuan yang saling tegak lurus, sehingga panjangnya sekitar 1.41. Karena itu, gerakan dinormalkan saat panjangnya lebih dari 1.
Tantangan
SedangKamera perlahan mengitari pemain (CameraRig.cs, siap), sehingga sumbu dunia terus berputar di layar. Buat tombol panah menggerakkan pemain relatif terhadap kamera di Mover.cs, tempat gravitasi sudah ditulis. Inspector mengatur speed (4) dan cam, Transform kamera.
- Tombol atas menggerakkan pemain menjauhi kamera di sepanjang permukaan tanah, tombol bawah mendekat ke kamera, dan tombol kanan serta kiri ke arah kanan dan kiri kamera: sejauh
speedunit per detik ke setiap arah, termasuk diagonal, meskipun kamera menghadap ke bawah ke arah pemain. - Saat berjalan, pemain berputar menghadap ke arah geraknya. Saat berhenti, pemain tetap menghadap ke arah tersebut.
Tekan Play, berjalanlah sambil kamera berputar, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
public class Mover : MonoBehaviour
{
public float speed = 4f;
public float gravity = -15f;
public Transform cam;
CharacterController controller;
float verticalSpeed;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (controller.isGrounded && verticalSpeed < 0f)
{
verticalSpeed = -2f;
}
verticalSpeed += gravity * Time.deltaTime;
// Bergerak mengikuti sumbu dunia: buat karakter bergerak relatif terhadap cam dan menghadap ke arah geraknya
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