線を飛ばしてその途中接触した全オブジェクトを取得する:RaycastAll
Raycastは最初に接触したオブジェクトまでだが、この方法は接触した全オブジェクトを取得可能。
以下サンプルコード
// 指定地点最寄のセンターポイントを取得する. // Y軸(高さ)は引数として関数呼び時に指定する. public Vector3 GetNearestCenterPoint(Vector3 pos, float axisY) { int ii; bool chk = false; Vector3 returnPos = pos; RaycastHit[] hits; string hitTag; // 下方向にRaycastAllし、ControlCubeを見つけた場合にはその親であるセンターポイントの座標を取得する. hits = Physics.RaycastAll(pos, Vector3.down, 100); for(ii = 0 ; ii < hits.Length ; ii++) { hitTag = hits[ii].collider.gameObject.tag; if(hitTag == "ControlCube") { returnPos = new Vector3(hits[ii].collider.gameObject.transform.parent.transform.position.x, axisY, hits[ii].collider.gameObject.transform.parent.transform.position.z); chk = true; } } // センターポイントを発見できなかった場合には否を返す. // (返り値は引数まま). if(chk == false) Debug.LogError("Center point not found!");// if play on centercube cant find. return returnPos; }
その他似た目的の関数としては
- Physics.LineCast()
- Physics.SphereCast()
- Physics.CapsuleCast()
等が存在する。