Komponen Wheel ColliderBentuk tak terlihat yang digunakan untuk menangani tabrakan fisik untuk objek. Seorang sari tidak perlu menjadi bentuk yang sama dengan jala objek - perkiraan kasar sering lebih efisien dan tidak dapat dibedakan dalam gameplay. More info
Lihat di Glossary didukung oleh PhysX 3 Vehicles SDK.
Tutorial ini membawa Anda melalui proses membuat mobil fungsi dasar.
Untuk memulai, pilih GameObjectObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary > 3D ObjectPermainan 3D Objek seperti kubus, terrain atau ragdoll. More info
Lihat di Glossary > Plane. Ini adalah tanah mobil akan mengemudi. Meme it Untuk menjaganya sederhana, pastikan tanah memiliki Transformasi 0 (pada komponen Transform di Jendela Inspektur, klik cog Pengaturan dan klik Reset). Meningkatkan bidang Skala Transform untuk 100 untuk membuat Plane lebih besar.
car_root
.car_root
. Massa default 1kg terlalu ringan untuk pengaturan suspensi default; mengubahnya menjadi 1500kg untuk membuatnya jauh lebih berat.car_root
. Atur Transformasi ke 0 untuk membuatnya sempurna selaras di ruang lokal. Mobil ini berorientasi di sepanjang sumbu Z, jadi atur Z Scale ke 3.car_root
dan GameObject > Create Empty Child. Ubah nama menjadi wheels
. Atur Transformasi di atasnya. GameObject ini tidak wajib, tetapi berguna untuk tuning dan debugging nanti.wheels
GameObject, pergi ke GameObject > Create Empty Child, dan nama frontLeft
. Atur Transformator, kemudian atur Transform Position X ke -1, Y ke 0, dan Z untuk 1. Untuk menambahkan Collider ke roda, pergi ke Add component > Physics > Wheel ColliderRUMAH khusus untuk kendaraan yang ditanam. Ini memiliki deteksi tabrakan bawaan, roda fisika, dan model gesekan ban berbasis slip. Ini dapat digunakan untuk benda-benda selain roda, tetapi dirancang khusus untuk kendaraan dengan roda. More infofrontLeft
Transform ke 1. Ubah nama menjadi X.frontRight
.frontLeft
dan frontRight
GameObjects. Menggandakan mereka. Mengubah posisi Transform Z kedua GameObjects ke -1. Ubah nama menjadi rearLeft
dan rearRight
masing-masing.car_root
dan gunakan Alat Pindah untuk menaikkannya sedikit di atas tanah.Sekarang Anda harus dapat melihat sesuatu seperti ini:
Untuk membuat mobil ini benar-benar terurai, Anda perlu menulis controller untuk itu. Sampel kode berikut bekerja sebagai pengontrol:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SimpleCarController : MonoBehaviour {
public List<AxleInfo> axleInfos; // the information about each individual axle
public float maxMotorTorque; // maximum torque the motor can apply to wheel
public float maxSteeringAngle; // maximum steer angle the wheel can have
public void FixedUpdate()
{
float motor = maxMotorTorque * Input.GetAxis("Vertical");
float steering = maxSteeringAngle * Input.GetAxis("Horizontal");
foreach (AxleInfo axleInfo in axleInfos) {
if (axleInfo.steering) {
axleInfo.leftWheel.steerAngle = steering;
axleInfo.rightWheel.steerAngle = steering;
}
if (axleInfo.motor) {
axleInfo.leftWheel.motorTorque = motor;
axleInfo.rightWheel.motorTorque = motor;
}
}
}
}
[System.Serializable]
public class AxleInfo {
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor; // is this wheel attached to motor?
public bool steering; // does this wheel apply steer angle?
}
Buat skrip C# baru (Add Component > New Script), pada car_root
GameObject, salin sampel ini ke file skrip dan simpan. Anda dapat menyetel parameter skrip seperti yang ditunjukkan di bawah ini; bereksperimen dengan pengaturan dan masukkan Mode Play untuk menguji hasilnya.
Pengaturan berikut sangat efektif sebagai pengontrol mobil:
Hint: Pastikan untuk meningkatkan size
AxleInfo
.
Anda dapat memiliki hingga 20 roda pada kasus kendaraan tunggal, dengan masing-masing menerapkan kemudi, motor atau torsi pengereman.
Selanjutnya, pindah ke roda visual. Seperti yang dapat Anda lihat, Collider Roda tidak menerapkan posisi roda simulasi dan rotasi kembali ke Transformator Roda Collider, sehingga menambahkan roda visual memerlukan beberapa trik.
Anda memerlukan beberapa geometri roda di sini. Anda dapat membuat bentuk roda sederhana dari silinder. Ada beberapa pendekatan untuk menambahkan roda visual: sehingga Anda harus menetapkan roda visual secara manual dalam sifat skrip, atau menulis beberapa logika untuk menemukan roda visual yang sesuai secara otomatis. Tutorial ini mengikuti pendekatan kedua. Pasang roda visual ke Roda Collider GameObjects.
Selanjutnya, ubah skrip pengontrol:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[System.Serializable]
public class AxleInfo {
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor;
public bool steering;
}
public class SimpleCarController : MonoBehaviour {
public List<AxleInfo> axleInfos;
public float maxMotorTorque;
public float maxSteeringAngle;
// finds the corresponding visual wheel
// correctly applies the transform
public void ApplyLocalPositionToVisuals(WheelCollider collider)
{
if (collider.transform.childCount == 0) {
return;
}
Transform visualWheel = collider.transform.GetChild(0);
Vector3 position;
Quaternion rotation;
collider.GetWorldPose(out position, out rotation);
visualWheel.transform.position = position;
visualWheel.transform.rotation = rotation;
}
public void FixedUpdate()
{
float motor = maxMotorTorque * Input.GetAxis("Vertical");
float steering = maxSteeringAngle * Input.GetAxis("Horizontal");
foreach (AxleInfo axleInfo in axleInfos) {
if (axleInfo.steering) {
axleInfo.leftWheel.steerAngle = steering;
axleInfo.rightWheel.steerAngle = steering;
}
if (axleInfo.motor) {
axleInfo.leftWheel.motorTorque = motor;
axleInfo.rightWheel.motorTorque = motor;
}
ApplyLocalPositionToVisuals(axleInfo.leftWheel);
ApplyLocalPositionToVisuals(axleInfo.rightWheel);
}
}
}
Satu parameter penting dari komponen Collider Roda adalah Force App Point Distance. Ini adalah jarak dari dasar roda beristirahat ke titik di mana pasukan roda diterapkan. Nilai default adalah 0, yang berarti untuk menerapkan kekuatan di dasar roda istirahat, tetapi sebenarnya, itu bijaksana untuk memiliki titik ini terletak di suatu tempat sedikit di bawah pusat mobil massa.