2016-11-01 10 views
1

私が作成した現在の設定をゲームオブジェクトにします。レイキャスト検出は

目的は、バックグリッドの各タイルからレイキャストを作成して、その前に何かがあるかどうかを検出し、そのタイルタグを変更することです。

int tileNumber = 0; 
     for (float y = 0; y > mapHeight; y--) 
     { 
      for (float x = 0; x < mapWidth; x++) 
      { 
       tile.GetComponent<Renderer>().enabled = true; 
       GameObject go = Instantiate(tile, new Vector3(x/3, y/3, -2), Quaternion.identity) as GameObject; 
       tileNumber++; 
       go.name = "tile" + tileNumber; 
       go.tag = "grid"; 

       RaycastHit hit; 
       Vector3 fwd = go.transform.TransformDirection(Vector3.forward); 
       Debug.DrawRay(go.transform.position, fwd * 50, Color.green); 
       if(Physics.Raycast(go.transform.position, fwd, out hit, 200)){ 
        go.tag = "walkableGrid"; 
       } 

      } 
     } 

しかし、デバッグ線も示していない、とタグがいずれか変更されません:

私のコードは次のように見えます。確かに私のマップグリッドを検出していない、作業している光線を示し

画像: enter image description here

EDIT:プログラマが私を助けようとしたが、彼のソリューションは私のために動作しませんでした。彼は彼が私のプロジェクトをHERES、あるとして誰もが興味を持っているので、もし問題が、他の場所にあるかもしれません述べています:https://www.dropbox.com/s/535soeswrgq37b4/MTA16336_Project_Boardgame.rar?dl=0

+0

"しかし、それは動作していないようです。デバッグさえ表示されません"あなたのコードにDebug.Logはありません.....何がうまくいかず、何が動作しますか? – Programmer

+0

私は "Debug.DrawRay(go.transform.position、fwd * 50、Color.green);"可視光線を表示する必要があります –

+0

ええ、それはそれが呼び出される頻度によります。フレームごとに呼び出されないかどうかは分かりません。 Debug.Logを追加して、コードの一部に到達していることを確認する必要があります。 – Programmer

答えて

0

それは私の「地図」オブジェクトのどれもが rigibodyもコライダーを持っていないどちらも何も価値があります。

Physics.Raycastは、コライダーのない決して仕事をます。

これは2Dゲームなので、Box collider 2Dを使用する必要があります。 また、Rigidbody 2Dを添付してください。

最後に、Physics.Raycastは、なし 2Dコライダーでのみ使用されます。それをRaycastHit2D.Raycastに置き換える必要があります。また、RaycastHitRaycastHit2Dに置き換えてください。

それが簡単に、単純に変更するには:

RaycastHit hit; 
Vector3 fwd = go.transform.TransformDirection(Vector3.forward); 
Debug.DrawRay(go.transform.position, fwd * 50, Color.green); 
if (Physics.Raycast(go.transform.position, fwd, out hit, 200)) 
{ 
    go.tag = "walkableGrid"; 
} 

RaycastHit2D hit; 
Vector3 fwd = go.transform.TransformDirection(Vector3.forward); 
Debug.DrawRay(go.transform.position, fwd * 50, Color.green); 
hit = Physics2D.Raycast(go.transform.position, fwd, 200); 

if (hit) 
{ 
    go.tag = "walkableGrid"; 
} 

にこれは今限りBox Collider 2Dが各ブロックに装着されているように動作するはずです。また、Rigidbody 2Dを添付してください。倒れている場合は、重力スケール0に設定します。

+0

私はあなたの正確なコードを使用しました。剛体を加え、エッジコライダーとボックスコライダーの両方でテストしましたが、コードはif bracket内のコードにはまだ届きません。インスタンシエーションでオブジェクトをGameObjectsに変換すると、2D検出としても機能しますか? –

+0

"インスタンシエーションでオブジェクトをGameObjectsに変換すると、2D検出としても機能しますか?"はい。覚えておいて、私は 'Box Collider 2D' ** ** Box Colliderではないと言った。これらはまったく違うものです。 – Programmer

+0

私は現在その結果を出したEdgeCollider2Dを使用しています。その後、Box Collider2Dでテストしましたが、これは同じ結果です。私はもっ​​と情報を与えることができればいいと思っていますが、それはすべて私が想像できることです。 –

関連する問題