Guncangan Kamera
Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 48 dari 63.
Guncangan adalah rangkaian singkat offset acak: selama beberapa persepuluh detik, kamera berada di titik acak dekat posisi istirahatnya, titik baru dipilih pada setiap frame, lalu kamera kembali. Coroutine cocok untuk ini karena berjalan selama beberapa frame dan berakhir dengan sendirinya. Kamera ini berguncang saat sebuah batu besar mendarat (skrip lain memanggil BoulderLanded(); file diawali dengan using System.Collections; untuk IEnumerator):
public float strength = 0.2f;
public float duration = 0.4f;
Vector3 rest;
void Start()
{
rest = transform.localPosition;
}
public void BoulderLanded()
{
StartCoroutine(Shake());
}
IEnumerator Shake()
{
float elapsed = 0f;
while (elapsed < duration)
{
transform.localPosition = rest + Random.insideUnitSphere * strength;
elapsed += Time.deltaTime;
yield return null;
}
transform.localPosition = rest;
}Random.insideUnitSphere * strength menghasilkan offset acak dengan panjang hingga strength ke segala arah, dan yield return null memilih offset baru pada frame berikutnya. Menambahkan Time.deltaTime pada setiap iterasi menghitung detik sebenarnya, sehingga guncangan berlangsung selama duration pada frame rate apa pun. Baris terakhir mengembalikan kamera ke posisi semula; tanpa baris itu, kamera tetap berada di posisi yang ditentukan oleh offset terakhir.
Pada setiap frame, Unity menjalankan setiap Update(), lalu coroutine yang menunggu pada yield return null, kemudian setiap LateUpdate(). Jadi, kamera yang mengikuti objek dan menetapkan posisinya di LateUpdate() akan menimpa apa pun yang dilakukan oleh guncangan. Mengguncang localPosition menghindari hal ini ketika kamera menjadi child dari object kosong yang melakukan gerakan mengikuti objek: parent bergerak, sementara kamera berguncang di sekitarnya.
Tantangan
SedangKamera ini mengikuti pemain (panah menggerakkannya): di LateUpdate() kamera berada di posisi pemain ditambah offset, dan kamera bukan child dari apa pun. Buat kamera berguncang sambil tetap mengikuti pemain:
- Space membuat kamera berguncang selama
duration(0.4) detik. Pada setiap frame selama guncangan, kamera berada di lokasi acak baru dengan jarak hinggastrength(0.3) dari posisi ikutan, sambil tetap mengikuti pemain. - Saat guncangan berakhir, kamera kembali tepat ke posisi ikutannya.
Space sudah memulai coroutine Shake(). Tekan Play, bergeraklah lalu tekan Space, kemudian tekan Check.
Coba sendiri
using System.Collections;
using UnityEngine;
public class ShakeFollow : MonoBehaviour
{
public Transform player;
public Vector3 offset = new Vector3(0, 4, -8);
public float strength = 0.3f;
public float duration = 0.4f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(Shake());
}
}
void LateUpdate()
{
transform.position = player.position + offset;
}
IEnumerator Shake()
{
// Goyangkan kamera selama duration detik, hingga sejauh strength dari posisi kamera saat mengikuti player.
yield return null;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Fisika dan Gameplay
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa Hancur