Ray --3D--

バージョン情報

	5.3.7f1

RaycastHit

RaycastHitはRaycastの判定で交差していたゲームオブジェクトの情報や
交差情報などが格納されいる3D用のクラスです。

情報内容

RaycastHitのメンバです。 ※よく利用するメンバを紹介しています。 collider: 交差したゲームオブジェクトのCollider情報 distance: 交差したオブジェクトとの距離 transform: 交差したオブジェクトのtransform情報 rigidbody: 交差したオブジェクトのRigidbody ※関連付けがない場合はnull point: 交差したオブジェクトの位置 transformなどは対象となるゲームオブジェクトの名前や 座標、gameObjectが取得できるの特に利用します。

判定メソッド

Rayによる交差判定のメソッドはPhysics2DクラスのRaycastRaycastAllがあります。
このメソッドは複数のオーバーロードが用意されているので一部のみ解説をします。

Raycast

RaycastはRayと複数のゲームオブジェクトで判定を行います。 複数のゲームオブジェクトと交差している場合は 最初に交差していると判定されたゲームオブジェクトが選択されます。 オーバーロードその1 戻り値: Rayが交差しているか 型:bool true:交差している false:交差していない 引数: Ray ray: 開始位置と向きが設定されているRay 内容: ・Rayとゲームオブジェクトとの交差判定を行う ・交差していればtrue、交差していなければfalseを返す 例: Vector3 pos = new Vector3(0.0f, 10.0f, 0.0f); Vector3 direction = new Vector3(0.0f, -1.0f, 0.0f); Ray ray = new Ray(pos, direction); RaycastHit hit_info = new RaycastHit(); /* Ray: 開始位置: X:0.0f Y:0.0f Z:0.0f 向き: X:0.0f Y:-1.0f Z:0.0f */ if (Physics.Raycast(ray)) { Debug.Log("何かと交差した"); } ・オーバーロードその2 戻り値: Rayが交差しているか 型:bool true:交差している false:交差していない 引数: Ray ray: 開始位置と向きが設定されているRay out RaycastHit hitInfo 交差情報 float maxDistance: Rayの最大距離 内容: ・Rayとゲームオブジェクトとの交際判定を行う   ・判定には距離の指定があり、範囲外のゲームオブジェクトとは  判定を行わない ・交差していればtrueが返り、hitInfoに詳細情報が格納されている out: C#における参照渡しを示すキーワード 例: Vector3 pos = new Vector3(0.0f, 10.0f, 0.0f); Vector3 direction = new Vector3(0.0f, -1.0f, 0.0f); Ray ray = new Ray(pos, direction); RaycastHit hit_info = new RaycastHit(); float max_distance = 10.0f; /* Ray: 開始位置: X:0.0f Y:0.0f Z:0.0f 向き: X:0.0f Y:-1.0f Z:0.0f Rayの探索最大距離 10.0f */ if (Physics.Raycast(ray, out hit_info, max_distance)) { Debug.Log(hit_info.transform.name + "と交差した"); } ・オーバーロードその3 戻り値: Rayが交差しているかどうか 型:bool true:交差している false:交差していない 引数: Ray ray: 開始位置と向きが設定されているRay out RaycastHit hitInfo 交差情報 float maxDistance: Rayの最大距離 int layerMask: 判定を行うレイヤーを指定するためのマスク 内容: ・Rayとゲームオブジェクトとの交差判定を行い、  交差していればtrueが返り、hitInfoに詳細情報が格納されている ・判定には距離の指定があり、範囲外のゲームオブジェクトとは  判定を行わない ・判定を行うゲームオブジェクトはlayerMaskに指定した  レイヤーのみが対象となる out: C#における参照渡しを示すキーワード 例: Vector3 pos = new Vector3(0.0f, 10.0f, 0.0f); Vector3 direction = new Vector3(0.0f, -1.0f, 0.0f); Ray ray = new Ray(pos, direction); RaycastHit hit_info = new RaycastHit(); float max_distance = 10.0f; // "Character"と"Stage"レイヤーのみ交差させる int layer_mask = LayerMask.GetMask(new string[] { "Character", "Stage" }); /* Ray: 開始位置: X:0.0f Y:0.0f Z:0.0f 向き: X:0.0f Y:-1.0f Z:0.0f Rayの探索最大距離 10.0f マスクレイヤー: Characterレイヤー Stageレイヤー */ if (Physics.Raycast(ray, out hit_info, max_distance, layer_mask)) { Debug.Log(hit_info.transform.name + "と交差した"); }

RaycastAll

RaycastAllはRayと交差している全てのゲームオブジェクトを取得できます。 全てのオブジェクトの取得を行うので、通常のRaycastと比較して 処理コストが高くなっていることに注意が必要です。 ※.layerを使用して最低限の判定にするようしたりと最適化を行います ・オーバーロードその1 戻り値: Rayと交差情報が格納されているRaycastHitの配列 引数: Ray ray: 開始位置と向きが設定されているRay 内容: ・Rayとゲームオブジェクトとの交差判定を行う ・交差情報はRaycastHitの配列に格納され、戻り値として返る 例: Vector3 pos = new Vector3(0.0f, 10.0f, 0.0f); Vector3 direction = new Vector3(0.0f, -1.0f, 0.0f); Ray ray = new Ray(pos, direction); RaycastHit[] hit_list; /* Ray: 開始位置: X:0.0f Y:0.0f Z:0.0f 向き: X:0.0f Y:-1.0f Z:0.0f */ hit_list = Physics.RaycastAll(ray); for (int i = 0; i < hit_list.Length; i++) { Debug.Log(hit_list[i].transform.name + "と交差した"); } ・オーバーロードその2 戻り値: Rayと交差しているゲームオブジェクトの情報が格納されている RaycastHitの配列 引数: Ray ray: 開始位置と向きが設定されているRay float maxDistance: Rayの最大距離 内容: ・Rayとゲームオブジェクトとの交差判定を行う ・交差情報はRaycastHitの配列に格納され、戻り値として返る ・判定には距離の指定があり、範囲外のゲームオブジェクトとは  判定を行わない 例: Vector3 pos = new Vector3(0.0f, 10.0f, 0.0f); Vector3 direction = new Vector3(0.0f, -1.0f, 0.0f); Ray ray = new Ray(pos, direction); RaycastHit[] hit_list; float max_distance = 10.0f;; /* Ray: 開始位置: X:0.0f Y:0.0f Z:0.0f 向き: X:0.0f Y:-1.0f Z:0.0f Rayの探索最大距離 10.0f */ hit_list = Physics.RaycastAll(ray, max_distance); for (int i = 0; i < hit_list.Length; i++) { Debug.Log(hit_list[i].transform.name + "と交差した"); } ・オーバーロードその3 戻り値: Rayと交差情報が格納されているRaycastHitの配列 引数: Ray ray: 開始位置と向きが設定されているRay float maxDistance: Rayの最大距離 int layerMask: 判定を行うレイヤーを指定するためのマスク 内容: ・Rayとゲームオブジェクトとの交差判定を行う ・交差情報はRaycastHitの配列に格納され、戻り値として返る ・判定には距離の指定があり、範囲外のゲームオブジェクトとは  判定を行わない ・判定を行うゲームオブジェクトのLayerのマスク指定を行っており、  指定されたレイヤー以外は判定の対象外となる 例: Vector3 pos = new Vector3(0.0f, 10.0f, 0.0f); Vector3 direction = new Vector3(0.0f, -1.0f, 0.0f); Ray ray = new Ray(pos, direction); RaycastHit[] hit_list; float max_distance = 10.0f; // "Character"と"Stage"レイヤーのみ交差させる int layer_mask = LayerMask.GetMask(new string[] { "Character", "Stage" }); /* Ray: 開始位置: X:0.0f Y:0.0f Z:0.0f 向き: X:0.0f Y:-1.0f Z:0.0f Rayの探索最大距離 10.0f マスクレイヤー: Characterレイヤー Stageレイヤー */ hit_list = Physics.RaycastAll(ray, max_distance, layer_mask); for (int i = 0; i < hit_list.Length; i++) { Debug.Log(hit_list[i].transform.name + "と交差した"); }