2016-03-24 4 views
0

これをデバッグしていますが、これまではどこにも行きません。Update()+ Raycast +タグがマウスをクリックしたときにゲームオブジェクトの誤った識別を引き起こしています

私の設定:実行時にプレハブが生成されました。彼らはそれらを識別するためにすべてタグ "npc_entity"を持っています。 私はそれらのうちの1つをクリックすると、gameobject(私のカスタムエンティティクラス)に接続されているコンポーネントの1つにあるデータを取得したいと思います。私はアップデート機能でレイキャスティングでこれを達成し、ヒットポイントでゲームオブジェクトを取得します。

ここで奇妙なことは次のとおりです。私は、ゲームウィンドウ内の特定のエンティティをクリックするためにレイキャストを使用します。パラメータを読んでください。インスタンス化されたエンティティが1つしかない場合は、すべてOKです。 2つ以上ある場合は、更新が複数回呼び出され、そのたびにデータが上書きされます。

私は、プレハブ自体でレイキャスティングする更新機能を備えたスクリプトを持っています。これはコードです:

void Update() 
{ 
    // using this to select entities 
    if (Input.GetMouseButtonDown(0) && Camera.main.name == "top_Camera") 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
     if (Physics.Raycast(ray, out hit, raycast_length) && hit.collider.gameObject.tag == "npc_entity") 
     { 
      selected_target = gameObject; 
      Debug.Log(selected_target.name + " " + selected_target.GetComponent<AIPlayer>().connected_player.playername); 
      UpdateNPCUI(); 
     } 
    } 
} 

void UpdateNPCUI() 
{ 
    ui_manager.NPCpanel.GetComponentInChildren<CanvasGrou>().alpha = 1; 
    NPC_name.text = selected_target.GetComponent<AIPlayer>().connected_player.playername); 

} 

私は理解していないで、私はインスタンス化し、すべてのゲームオブジェクトは基本的に処理されている動作を取得なぜ。ゲームオブジェクトを一度クリックすると、レイキャストはその位置がゲームオブジェクトの位置と一致していることを示します。他の人はそれの近くにいません。

何か提案がありがとうございます。ステップバイステップのデバッグもしています。私はその問題を見ることができません。

+0

?あなたの問題はあまり明確ではありません。メソッドが複数回実行されており、値が上書きされていますか? –

+0

このスクリプトはプレハブに添付されています。エンティティをインスタンス化すると、それぞれがこのスクリプトを持ちます。問題は、私が理解したところでは、N個のエンティティをN個のスクリプトで持ち、それぞれが独自のスクリプトで更新スクリプトを呼び出していることが原因で、データが上書きされることがあります。クリックしたユニットでのみクリックをトリガーしようとしていますが、発生しません。 –

+1

Raycastスクリプトは、他のコントローラタイプのゲームオブジェクトに配置する必要があります。 –

答えて

0

各プレハブにスクリプトがあるため、データが上書きされるたびに毎回。

このスクリプトを各インスタンスに追加する必要はありません。このコードは、他の単一のインスタンスのゲームオブジェクトに置くことができ、1回だけ起動します。このスクリプトは、GameManagerのゲームオブジェクトや、1つのインスタンスのみを持つものに置きます。

のみ現在のゲームオブジェクトを取得し、すべてではないそれらのために:インスペクタでこのスクリプトを装着されている何

// using this to select entities 
if (Input.GetMouseButtonDown(0) && Camera.main.name == "top_Camera") 
{ 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    RaycastHit hit; 

    if (Physics.Raycast(ray, out hit, raycast_length) && hit.collider.gameObject.tag == "npc_entity") 
    { 
     selected_target = hit.collider.gameObject; 
     Debug.Log(selected_target.name + " " + selected_target.GetComponent<AIPlayer>().connected_player.playername); 
     UpdateNPCUI(); 
    } 
} 
+0

清算に感謝します。アプリケーションに使用するメインゲームマネージャーに追加することができます。常に存在する。それを今試してみた –

+0

私はそれを試して、これまでのところ、それは動作し、私はhit.colliderが欠場した。あなたの返信でgameobject。ありがとう! –

関連する問題