Ray --2D--
バージョン情報
5.3.7f1
RaycastHit2D
RaycastHit2DはRaycastの判定で交差していたゲームオブジェクトの情報や
交差情報などが格納されている2D用のクラスです。
情報内容
RaycastHitのメンバです。
※よく利用するメンバを紹介しています。
・collider
交差したゲームオブジェクトのCollider情報
2DのRayの判定では
・distance
交差したオブジェクトとの距離
・transform
交差したオブジェクトのtransform情報
・rigidbody
交差したオブジェクトのRigidbody
※関連付けがない場合はnull
・point
交差したオブジェクトの位置
transformなどは対象となるゲームオブジェクトの名前や
座標、gameObjectが取得できるの特に利用します。
判定メソッド
Rayによる交差判定のメソッドはPhysics2DクラスのRaycast、RaycastAllがあります。
このメソッドは複数のオーバーロードが用意されているので一部のみ解説をします。
Raycast
RaycastはRayと複数のゲームオブジェクトで判定を行います。
複数のゲームオブジェクトと交差している場合は
最初に交差していると判定されたゲームオブジェクトが選択されます。
・オーバーロードその1
戻り値:
RaycastHit2D:
Rayと交差情報が格納されているRaycastHit2D
引数:
Vector2 origin:
開始位置と向きが設定されているRayの情報
Vector2 direction:
Rayの向き
内容:
・引数に開始位置と向きを指定してゲームオブジェクトとの交差を判定する
・交差判定の結果は戻り値としてRaycastHit2Dを返し、
その内容によって判断する
例:
Vector2 pos = new Vector2(0.0f, 10.0f);
Vector2 direction = new Vector2(0.0f, -1.0f);
RaycastHit2D hit_info;
/*
Ray:
開始位置:
X:0.0f
Y:0.0f
向き:
X:0.0f
Y:-1.0f
*/
hit_info = Physics2D.Raycast(pos, direction);
// colliderの中身が非nullなら交差有り
if (hit_info.collider != null)
{
string name = hit_info.transform.name;
Debug.Log(name + "と交差した");
}
・オーバーロードその2
戻り値:
RaycastHit2D:
Rayと交差情報が格納されているRaycastHit2D
引数:
Vector2 origin:
開始位置と向きが設定されているRayの情報
Vector2 direction:
Rayの向き
float maxDistance:
Rayの最大距離
内容:
・引数に開始位置と向きを指定してゲームオブジェクトとの交差を判定する
・交差判定の結果は戻り値としてRaycastHit2Dを返し、
その内容によって判断する
・判定には距離の指定があり、範囲外のゲームオブジェクトとは
判定を行わない
例:
Vector2 pos = new Vector2(0.0f, 10.0f);
Vector2 direction = new Vector2(0.0f, -1.0f);
float max_distance = 10.0f;
RaycastHit2D hit_info;
/*
Ray:
開始位置:
X:0.0f
Y:0.0f
向き:
X:0.0f
Y:-1.0f
Rayの探索最大距離
10.0f
*/
hit_info = Physics2D.Raycast(pos, direction, max_distance);
// colliderの中身が非nullなら交差有り
if (hit_info.collider != null)
{
string name = hit_info.transform.name;
Debug.Log(name + "と交差した");
}
・オーバーロードその3
戻り値:
RaycastHit2D:
Rayと交差情報が格納されているRaycastHit2D
引数:
Vector2 origin:
開始位置と向きが設定されているRayの情報
Vector2 direction:
Rayの向き
float maxDistance:
Rayの最大距離
int layerMask:
判定を行うレイヤーを指定するためのマスク
内容:
・引数に開始位置と向きを指定してゲームオブジェクトとの交差を判定する
・交差判定の結果は戻り値としてRaycastHit2Dを返し、
その内容によって判断する
・判定には距離の指定があり、範囲外のゲームオブジェクトとは
判定を行わない
・判定を行うゲームオブジェクトはlayerMaskに指定した
レイヤーのみが対象となる
例:
Vector2 pos = new Vector3(0.0f, 10.0f);
Vector2 direction = new Vector3(0.0f, -1.0f);
RaycastHit2D hit_info;
float max_distance = 10.0f;
// "Character"と"Stage"レイヤーのみ交差させる
int layer_mask = LayerMask.GetMask(
new string[] {
"Character", "Stage"
});
/*
Ray:
開始位置:
X:0.0f
Y:0.0f
向き:
X:0.0f
Y:-1.0f
Rayの探索最大距離
10.0f
マスクレイヤー:
Characterレイヤー
Stageレイヤー
*/
hit_info = Physics2D.Raycast(pos,
direction,
max_distance,
layer_mask))
// colliderの中身が非nullなら交差有り
if (hit_info.collider != null)
{
string name = hit_info.transform.name;
Debug.Log(name + "と交差した");
}
RaycastAll
RaycastAllはRayと交差している全てのゲームオブジェクトを取得できます。
全てのオブジェクトの取得を行うので、通常のRaycastと比較して
処理コストが高くなっていることに注意が必要です。
※.layerを使用して最低限の判定にするようしたりと最適化を行います
・オーバーロードその1
戻り値:
RaycastHit2D[]:
Rayと交差情報が格納されているRaycastHit2Dの配列
引数:
Vector2 origin:
開始位置と向きが設定されているRayの情報
Vector2 direction:
Rayの向き
内容:
・引数に開始位置と向きを指定してゲームオブジェクトとの交差を判定する
・交差情報はRaycastHitの配列に格納され、戻り値として返る
例:
Vector2 pos = new Vector3(0.0f, 10.0f);
Vector2 direction = new Vector3(0.0f, -1.0f);
RaycastHit2D[] hit_list;
/*
Ray:
開始位置:
X:0.0f
Y:0.0f
向き:
X:0.0f
Y:-1.0f
*/
hit_list = Physics2D.RaycastAll(pos, direction);
for (int i = 0; i < hit_list.Length; i++)
{
if (hit_list[i].collider != null)
{
string name = hit_list[i].transform.name;
Debug.Log(name + "と交差した");
}
}
・オーバーロードその2
戻り値:
RaycastHit2D[]:
Rayと交差情報が格納されているRaycastHit2Dの配列
引数:
Vector2 origin:
開始位置と向きが設定されているRayの情報
Vector2 direction:
Rayの向き
float maxDistance:
Rayの最大距離
内容:
・引数に開始位置と向きを指定してゲームオブジェクトとの交差を判定する
・交差情報はRaycastHitの配列に格納され、戻り値として返る
・判定には距離の指定があり、範囲外のゲームオブジェクトとは
判定を行わない
例:
Vector2 pos = new Vector3(0.0f, 10.0f);
Vector2 direction = new Vector3(0.0f, -1.0f);
RaycastHit2D[] hit_list;
float max_distance = 10.0f;;
/*
Ray:
開始位置:
X:0.0f
Y:0.0f
向き:
X:0.0f
Y:-1.0f
Rayの探索最大距離
10.0f
*/
hit_list = Physics2D.RaycastAll(pos,
direction,
max_distance);
for (int i = 0; i < hit_list.Length; i++)
{
if (hit_list[i].collider != null)
{
string name = hit_list[i].transform.name;
Debug.Log(name + "と交差した");
}
}
・オーバーロードその3
戻り値:
RaycastHit2D[]:
Rayと交差情報が格納されているRaycastHit2Dの配列
引数:
Vector2 origin:
開始位置と向きが設定されているRayの情報
Vector2 direction:
Rayの向き
float maxDistance:
Rayの最大距離
int layerMask:
判定を行うレイヤーを指定するためのマスク
内容:
・引数に開始位置と向きを指定してゲームオブジェクトとの交差を判定する
・交差情報はRaycastHitの配列に格納され、戻り値として返る
・判定には距離の指定があり、範囲外のゲームオブジェクトとは
判定を行わない
・判定を行うゲームオブジェクトのLayerのマスク指定を行っており、
指定されたレイヤー以外は判定の対象外となる
例:
Vector2 pos = new Vector3(0.0f, 10.0f);
Vector2 direction = new Vector3(0.0f, -1.0f);
RaycastHit2D[] 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
向き:
X:0.0f
Y:-1.0f
Rayの探索最大距離
10.0f
マスクレイヤー:
Characterレイヤー
Stageレイヤー
*/
hit_list = Physics2D.RaycastAll(pos,
direction,
max_distance,
layer_mask);
for (int i = 0; i < hit_list.Length; i++)
{
if (hit_list[i].collider != null)
{
string name = hit_list[i].transform.name;
Debug.Log(name + "と交差した");
}
}