Efek Terpental
Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 57 dari 71.
Efek terpental adalah dorongan menjauh dari apa pun yang menabrakmu: satu impuls sepanjang garis dari penabrak ke benda yang tertabrak. Bumper ini membuat semua benda yang menabraknya terpental:
[SerializeField] private float power = 8f;
void OnCollisionEnter(Collision collision)
{
Vector3 away = collision.transform.position - transform.position;
away.y = 0f;
collision.rigidbody.AddForce(away.normalized * power, ForceMode.Impulse);
}collision.transform.position - transform.position mengarah dari bumper ke benda yang menabraknya. Nilai y-nya diatur ke 0 agar dorongannya tetap mendatar, dan normalized membuat ukurannya tetap sama sejauh apa pun jarak antara kedua pusat benda. ForceMode.Impulse adalah dorongan sekali saja: mode ini langsung mengubah kecepatan sebesar power dibagi massa, sehingga bola bermassa 2 melesat dengan kecepatan setengah dari bola bermassa 1. ForceMode.Force bawaan dimaksudkan untuk diterapkan di setiap langkah dan menghasilkan dorongan sebesar satu langkah, 50 kali lebih kecil.
Dorongan hanya bertahan selama tidak ada yang menimpa kecepatan. Pemain yang FixedUpdate-nya mengatur rb.linearVelocity berdasarkan tombol panah di setiap langkah akan kehilangan dorongan itu pada langkah berikutnya. Jadi, skrip seperti itu harus membiarkan kecepatan tetap apa adanya sejenak setelah terkena benturan, atau menggerakkan pemain dengan gaya.
Tantangan
SedangBiarkan pemain memicu gelombang kejut dengan Space.
- Saat
Input.GetKeyDown(KeyCode.Space), lakukan perulanganforeach (Collider hit in Physics.OverlapSphere(transform.position, radius)), dengan melewati collider milik pemain sendiri. - Untuk setiap
hit.TryGetComponent(out Rigidbody body), ambilaway = hit.transform.position - transform.positiondenganaway.y = 0f. - Panggil
body.AddForce(away.normalized * power + Vector3.up * lift, ForceMode.Impulse);.
Tekan tombol “Main” dan tekan Space di antara peti. Lalu tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
public class Shockwave : MonoBehaviour
{
[SerializeField] private float radius = 4f;
[SerializeField] private float power = 6f;
[SerializeField] private float lift = 2f;
void Update()
{
// Saat menekan Space: dorong setiap Rigidbody dalam radius menjauh dari pemain
}
}
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