Menu
CoddyTech

OverlapSphere dan SphereCast

Termasuk bagian Fisika dan Gameplay dalam perjalanan Unity di Coddy. Pelajaran 38 dari 63.

Sebuah sinar menanyakan tentang sebuah garis. Physics.OverlapSphere(center, radius) menanyakan tentang area berbentuk bola: fungsi ini mengembalikan array berisi setiap collider yang menyentuh bola di center, tanpa arah dan tanpa 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 berisi semua yang berada dalam jangkauan: lantai, dinding, dan collider bom itu sendiri, karena pengujian overlap tidak melewati collider tempat pengujian dimulai. Itulah sebabnya perulangan memeriksa tag sebelum bertindak. attachedRigidbody milik setiap collider adalah Rigidbody yang memilikinya, atau null untuk benda statis seperti lantai.

Physics.SphereCast(origin, radius, direction, out hit, maxDistance) adalah sinar tebal: fungsi 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: sinar tipis yang melewati tengah celah tidak mengenai apa pun, sedangkan sphere cast mengenai salah satu tiang. Seperti sinar, sphere cast melewati collider yang sudah disentuhnya di titik awal.

challenge icon

Tantangan

Sedang

Persenjatai meriam dengan beam yang lebar. Skrip Beam terpasang pada Cannon, dan Inspector memberinya radius sebesar 0.5 serta range sebesar 12. Panah kiri dan kanan memutar meriam.

  • Saat Space ditekan, sapukan bola dengan radius ke depan dari meriam, sepanjang range unit.
  • Jika mengenai sesuatu, catat Hit Pole beserta nama benda yang terkena, lalu hancurkan object tersebut.
  • Jika tidak mengenai apa pun, catat Miss.

Pole yang tipis berdiri agak ke samping dari garis tengah meriam. Tekan Play dan tembak, lalu tekan 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 berjari-jari radius ke depan: hancurkan objek pertama yang terkena.
        }
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Fisika dan Gameplay