origin | ワールド座標でのレイの開始地点 |
direction | レイの方向 |
maxDistance | レイが衝突を検知する最大距離 |
layerMask | レイヤーマスクはレイキャストするときに選択的に衝突を無視するために使用します。 |
queryTriggerInteraction | トリガーに設定されているものも検索対象にするか |
bool レイが任意のコライダーと交わる場合は true、それ以外は false
シーンにあるすべてのコライダーに対して、 origin
の位置から direction
の方向に maxDistance
の距離だけレイを投じます。
You may optionally provide a LayerMask, to filter out any Colliders you aren't interested in generating collisions with.queryTriggerInteraction
か、グローバル設定である Physics.queriesHitTriggers を使用してトリガーに設定されているコライダーとヒットさせるかを管理できます。
以下の例ではオブジェクトの現在位置から前方へ距離 10 ユニットのレイを投影するシンプルな Raycast を作成します。
using UnityEngine;
public class ExampleClass : MonoBehaviour { // C# example. void Update() { // Bit shift the index of the layer (8) to get a bit mask int layerMask = 1 << 8;
// This would cast rays only against colliders in layer 8. // But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask. layerMask = ~layerMask;
RaycastHit hit; // Does the ray intersect any objects excluding the player layer if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask)) { Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow); Debug.Log("Did Hit"); } else { Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white); Debug.Log("Did not Hit"); } } }
using UnityEngine;
public class ExampleClass : MonoBehaviour { void FixedUpdate() { Vector3 fwd = transform.TransformDirection(Vector3.forward);
if (Physics.Raycast(transform.position, fwd, 10)) print("There is something in front of the object!"); } }
注意: Raycast は、その原点がコライダーの内側にある場合そのコライダーを検知しません。
origin | ワールド座標でのレイの開始地点 |
direction | レイの方向 |
hitInfo | If true is returned, hitInfo will contain more information about where the collider was hit. (See Also: RaycastHit). |
maxDistance | レイが衝突を検知する最大距離 |
layerMask | レイヤーマスク はレイキャストするときに選択的に衝突を無視するために使用します。 |
queryTriggerInteraction | トリガーに設定されているものも検索対象にするか |
bool 飛ばしたレイがコライダーにヒットした際に、true を返します。それ以外は false です。
シーン内のすべてのコライダーに対してレイを飛ばし、ヒットした情報を取得します
以下は現在のオブジェクトとヒットしたコライダー間の距離を報告する例です。
using UnityEngine;
public class RaycastExample : MonoBehaviour { void FixedUpdate() { RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) print("Found an object - distance: " + hit.distance); } }
以下はレイの投射距離を制限する maxDistance
パラメータを説明する例です。
using UnityEngine;
public class RaycastExample : MonoBehaviour { void FixedUpdate() { RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f)) print("Found an object - distance: " + hit.distance); } }
ray | 始点とレイの方向 |
maxDistance | レイが衝突を検知する最大距離 |
layerMask | レイヤーマスク はレイキャストするときに選択的に衝突を無視するために使用します。 |
queryTriggerInteraction | トリガーに設定されているものも検索対象にするか |
bool 飛ばしたレイがコライダーにヒットした際に、true を返します。それ以外は false です。
上記と同様ですが ray.origin
と ray.direction
を、origin と direction の代わりに使用します
using UnityEngine;
public class ExampleClass : MonoBehaviour { void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, 100)) print("Hit something!"); } }
ray | 始点とレイの方向 |
hitInfo | If true is returned, hitInfo will contain more information about where the collider was hit. (See Also: RaycastHit). |
maxDistance | レイが衝突を検知する最大距離 |
layerMask | レイヤーマスク はレイキャストするときに選択的に衝突を無視するために使用します。 |
queryTriggerInteraction | トリガーに設定されているものも検索対象にするか |
bool 飛ばしたレイがコライダーにヒットした際に、true を返します。それ以外は false です。
上記と同様ですが ray.origin
と ray.direction
を、origin と direction の代わりに使用します
以下は衝突が検知されている間レイの長さに沿った線を描画する例です。
using UnityEngine;
public class ExampleClass : MonoBehaviour { void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100)) Debug.DrawLine(ray.origin, hit.point); } }