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.
Tantangan
SedangPersenjatai 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
radiuske depan dari meriam, sepanjangrangeunit. - Jika mengenai sesuatu, catat
Hit Polebeserta 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.
}
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Fisika dan Gameplay
1Rigidbody
Gravitasi dan MassaDorong dengan AddForceMelompat dengan ImpulsFixedUpdate untuk FisikaKecepatanBenda KinematikRingkasan: Landasan Peluncur2Tabrakan
OnCollisionEnterApa yang Kutabrak?Pecah Saat BenturanBerdiri di Atas TanahPantulan dan GesekanBentuk ColliderRangkuman: Dinding yang Bisa Hancur