Kamera Orbit
Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 48 dari 71.
Untuk mengitari sebuah titik, pertahankan sebuah sudut, putar offset tetap sebesar sudut itu, lalu tambahkan hasilnya ke titik tersebut. Perkalian rotasi dengan vektor akan memutarnya: Quaternion.Euler(0, angle, 0) * offset mengayunkan offset mengitari sumbu y, sementara panjang dan tingginya tetap sama. Kamera ini mengitari patung dengan kecepatan 20 derajat per detik, selalu berada 3 unit di atas dan 6 unit dari patung:
public Transform statue;
public float speed = 20f;
float angle;
void LateUpdate()
{
angle += speed * Time.deltaTime;
Vector3 offset = new Vector3(0, 3, -6);
transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
transform.LookAt(statue);
}Pada sudut 0, offset-nya adalah (0, 3, -6), jadi kamera berada di belakang patung. Pada sudut 90, offset-nya adalah (-6, 3, 0), di sisi -x patung, dan pada sudut 180, offset-nya adalah (0, 3, 6), di depan patung. Menggerakkan kamera tidak memutarnya, jadi LookAt mengarahkannya kembali ke patung dari setiap posisi baru.
Sudut kedua akan menaikkan kamera: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) memutar arah belakang ke atas sebesar pitch (putaran positif mengitari sumbu x memiringkan (0, 0, -1) ke atas), lalu memutarnya mengitari sumbu dengan yaw, sehingga kamera tetap berjarak distance pada sudut apa pun.
Sudutnya disimpan di field milikmu sendiri, seperti pada Sudut Euler: nilainya bisa bertambah melewati 360 atau turun di bawah 0 tanpa lompatan, dan kamu bisa membatasinya atau mengubahnya dari keyboard. Melakukan ini di LateUpdate() menempatkan kamera setelah patung atau pemain bergerak pada frame tersebut.
Tantangan
SedangBiarkan pemain menerbangkan kamera mengelilingi menara.
- Di
Update(), panah kanan dan kiri mengubahyawdenganturnSpeed, sedangkan panah atas dan bawah mengubahpitchdengantiltSpeed, dikalikanTime.deltaTime. - Lalu, pertahankan
pitch = Mathf.Clamp(pitch, 10f, 60f);. - Di
LateUpdate(), aturtransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, lalutransform.LookAt(target);.
Tekan tombol “Main” dan terbang mengelilingi menara. Lalu tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
public class OrbitCamera : MonoBehaviour
{
public Transform target;
public float distance = 8f;
public float turnSpeed = 90f;
public float tiltSpeed = 45f;
public float yaw = 0f;
public float pitch = 30f;
void Update()
{
// Tombol panah mengubah yaw dan pitch.
}
void LateUpdate()
{
// Tempatkan kamera di sekitar target dan arahkan kamera ke target.
}
}
Semua pelajaran di Fisika dan Gameplay
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine PertamamuPerulangan dalam CoroutineMenghentikan CoroutineRangkuman: Hitung Mundur10Proyek: Kabur dari Arena
ArenaPara Pemburu2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa HancurLatihan sendiri: Playground Unity