線を飛ばしてその途中接触した全オブジェクトを取得する: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()

等が存在する。