Benda Kinematik
Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 6 dari 63.
Platform, lift, dan pintu yang bergerak harus bertumbukan seperti object padat, tetapi tidak boleh jatuh atau terdorong oleh apa pun yang mendarat di atasnya. Itulah body kinematik: atur rb.isKinematic = true, lalu gravitasi, gaya, dan benturan tidak lagi menggerakkannya. Collider-nya tetap diperhitungkan, jadi body dinamis (yang digerakkan oleh fisika) menabraknya seperti menabrak dinding, dan berdiri di atasnya seperti di lantai. Kamu menggerakkan body kinematik sendiri dengan rb.MovePosition.
Lift ini naik dengan kecepatan lift m/s hingga mencapai top. MovePosition menerima posisi yang akan dicapai setelah langkah ini, jadi kode menambahkan gerakan untuk satu langkah, menggunakan Time.fixedDeltaTime:
void Start()
{
rb = GetComponent<Rigidbody>();
rb.isKinematic = true;
}
void FixedUpdate()
{
if (rb.position.y < top)
{
rb.MovePosition(rb.position + Vector3.up * lift * Time.fixedDeltaTime);
}
}Mengapa tidak mengatur transform.position? Itu akan memindahkan object secara instan, dan fisika tidak akan mengetahui bahwa object itu bergerak: peti di atas platform geser akan tertinggal, bukan ikut bergerak. MovePosition memberi tahu fisika bahwa body bergerak ke posisi baru selama langkah tersebut, sehingga benda yang disentuhnya ikut terbawa dan terdorong dengan benar. AddForce tidak berpengaruh pada body kinematik, dan body kinematik tidak pernah bertumbukan dengan collider statis atau satu sama lain: hanya body dinamis yang menabraknya.
Tantangan
MudahRakit tergantung di atas lava, dan tombol panah seharusnya menggesernya ke kiri dan kanan sepanjang sumbu x dengan kecepatan speed m/s (2 di Inspector). Saat ini, Rigidbody-nya biasa, jadi rakit itu jatuh ke lava.
- Saat game dimulai, buat rakit menjadi kinematic agar tetap melayang di udara dan tidak ada yang menabraknya dapat mendorongnya.
- Gerakkan rakit dengan
MovePositiondiFixedUpdate(), menggunakan sumbu Horizontal mentah.
Tekan Play dan geser rakit, lalu tekan Check.
Coba sendiri
using UnityEngine;
public class Barge : MonoBehaviour
{
public float speed = 2f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
// Jadikan tongkang kinematik
}
void FixedUpdate()
{
// Geser tongkang sepanjang sumbu x dengan tombol panah
}
}
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