Mendorong Benda
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 40 dari 56.
CharacterController tidak pernah mendorong apa pun: arahkan karakter hingga menabrak peti dengan Rigidbody, lalu karakter akan berhenti seolah-olah menabrak dinding. Sebagai gantinya, Unity memanggil OnControllerColliderHit(ControllerColliderHit hit) pada script milik controller untuk setiap collider yang disentuh oleh Move, termasuk lantai, lalu script menentukan apa yang terjadi. hit.collider adalah yang tersentuh, hit.moveDirection adalah arah Move yang menyentuhnya, dan hit.normal adalah arah yang dihadapi permukaannya pada titik kontak. Berikut script dorong bawaan Unity:
public float pushPower = 2f;
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
if (body == null || body.isKinematic) return; // tidak ada yang perlu di-push
if (hit.moveDirection.y < -0.3f) return; // berada di bawah kaki kita
Vector3 pushDir = new Vector3(hit.moveDirection.x, 0f, hit.moveDirection.z);
body.linearVelocity = pushDir * pushPower;
}Setiap return memiliki alasan. Lantai dan dinding tidak memiliki Rigidbody, jadi body bernilai null untuk keduanya, dan keduanya tersentuh pada hampir setiap Move. Body kinematik hanya bergerak ketika script-nya sendiri menggerakkannya, jadi velocity tidak akan berpengaruh. Move yang arahnya curam ke bawah menyentuh sesuatu di bawah kaki, dan peti yang diinjak pemain tidak seharusnya terdorong.
Arah dorong hanya mempertahankan x dan z, sehingga peti meluncur di sepanjang tanah, bukan terdorong ke dalamnya. Mengatur linearVelocity, alih-alih menambahkan gaya, menggerakkan peti ringan dan peti berat dengan kecepatan yang sama. body.AddForce(pushDir * pushPower, ForceMode.Impulse) akan mendorong peti berat dengan kekuatan yang lebih kecil.
Tantangan
SedangTendang bola-bola di sekitar halaman. Pemain bergerak menggunakan CharacterController (Walker.cs, sudah siap). Tulis Kicker.cs, lalu pasang juga pada Player. Inspector mengatur kickPower (6) dan lift (4).
- Saat pemain berjalan menabrak object yang bisa didorong, atur
linearVelocity-nya ke arah gerakan, mendatar sejajar tanah, dikalikankickPower, lalu tambahkanliftlurus ke atas, agar bola melayang ke depan dan ke atas. - Tanah dan tiang tidak memiliki Rigidbody: lewati keduanya tanpa error.
- Bola yang berada di bawah kaki pemain tidak akan ditendang.
Tekan Mainkan dan tendang bola merah, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
public class Kicker : MonoBehaviour
{
public float kickPower = 6f;
public float lift = 4f;
// Tendang bola yang ditabrak pemain
}
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