Menu
CoddyTech

OverlapSphere dan SphereCast

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 40 dari 71.

Sebuah ray menanyakan tentang garis. Physics.OverlapSphere(center, radius) memeriksa wilayah berbentuk bola: fungsi ini mengembalikan array berisi setiap collider yang menyentuh bola di center, tanpa arah dan jarak. Bom ini menghancurkan setiap peti dalam jarak 3 unit saat meledak:

void Explode()
{
    Collider[] hits = Physics.OverlapSphere(transform.position, 3f);
    foreach (Collider c in hits)
    {
        if (c.CompareTag("Crate"))
        {
            Destroy(c.gameObject);
        }
    }
    Destroy(gameObject);
}

Array ini menampung semua yang berada dalam jangkauan: lantai, dinding, dan collider bom itu sendiri, karena pengujian overlap tidak melewati collider tempat pengujian dimulai. Karena itulah perulangan memeriksa tag sebelum bertindak. attachedRigidbody milik setiap collider adalah Rigidbody yang menjadi induknya, atau null untuk benda statis seperti lantai.

Physics.SphereCast(origin, radius, direction, out hit, maxDistance) adalah ray tebal: metode ini menyapu bola sepanjang garis dan melaporkan collider pertama yang akan ditabrak bola. Sebuah batu besar berjari-jari 1 yang menggelinding menuju celah selebar 1.5 di antara dua tiang menanyakan apakah batu itu muat: ray tipis yang melewati tengah celah tidak mengenai apa pun, sedangkan sphere cast mengenai tiang. Seperti ray, sphere cast melewati collider yang sudah disentuhnya di titik awal.

challenge icon

Tantangan

Sedang

Beri meriam pancaran lebar dengan Physics.SphereCast.

  1. Saat menekan Space, sapukan sebuah sphere: Physics.SphereCast(transform.position, radius, transform.forward, out RaycastHit hit, range).
  2. Saat mengenai sasaran, catat "Hit " + hit.collider.name (tembakan pertama mencatat Hit Pole) lalu hancurkan objek itu.
  3. Saat meleset, catat Miss.

Tekan tombol “Main” dan tembak tiga kali: Pole hancur, lalu Crate, kemudian tembakan meleset. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;

public class Beam : MonoBehaviour
{
    public float radius = 0.5f;
    public float range = 12f;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Sapukan bola dengan jari-jari radius ke depan, lalu hancurkan benda pertama yang terkena.
        }
    }
}

Semua pelajaran di Fisika dan Gameplay

Latihan sendiri: Playground Unity