Menu
CoddyTech

OverlapSphereとSphereCast

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 38/63。

レイは線について調べます。Physics.OverlapSphere(center, radius)は球状の領域について調べます。centerを中心とする球に触れているすべてのコライダーの配列を返し、方向も距離もありません。この爆弾は爆発すると、3 units以内にあるすべての木箱を破壊します。

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

配列には範囲内のすべてのものが含まれます。床、壁、そして爆弾自身のコライダーも含まれます。これは、重なり判定では開始位置に含まれているコライダーを除外しないためです。そのため、ループでは処理を行う前にタグを確認しています。各コライダーのattachedRigidbodyは、そのコライダーが属するRigidbodyです。床のような静的なものの場合はnullです。

Physics.SphereCast(origin, radius, direction, out hit, maxDistance)は太さのあるレイです。球を線に沿って動かし、その球が最初にぶつかるコライダーを報告します。半径1の岩が、幅1.5の2本の支柱の間にある隙間に向かって転がるとき、通り抜けられるかどうかを調べるのに使えます。隙間の中央に細いレイを通しても何にも当たりませんが、球のキャストでは支柱に当たります。レイと同様に、球のキャストも開始位置ですでに触れているコライダーを無視します。

challenge icon

チャレンジ

中級

大きなビームで大砲を武装させましょう。Beamスクリプトは大砲に設定し、インスペクターでradiusを0.5、rangeを12にします。左右の矢印キーで大砲を回転させます。

  • Spaceキーを押すと、大砲から前方にradiusの半径を持つ球体を、rangeの距離まで飛ばします。
  • 何かに当たったら、当たったものの名前とともにHit Poleをログに出力し、そのオブジェクトを破棄します。
  • 何にも当たらなかったら、Missをログに出力します。

細いPoleは、大砲の中心線から少し横に立っています。Playを押して発射し、次にCheckを押してください。

自分で試してみよう

using UnityEngine;

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

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 半径 radius の球を前方にスイープし、最初に衝突したものを破壊する。
        }
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン