Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

Biarkan pemain memicu gelombang kejut dengan Space.

  1. Saat Input.GetKeyDown(KeyCode.Space), lakukan perulangan foreach (Collider hit in Physics.OverlapSphere(transform.position, radius)), dengan melewati collider milik pemain sendiri.
  2. Untuk setiap hit.TryGetComponent(out Rigidbody body), ambil away = hit.transform.position - transform.position dengan away.y = 0f.
  3. 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

Latihan sendiri: Playground Unity