2017-07-20 3 views
0

にここで私はとの問題を抱えているコードです。その動作を防ぐには(オブジェクトを1回だけ作成する)?はUnityが代わりに1の複数のオブジェクトをインスタンス化し、クリック

+0

マウスボタンを押し続けると、1だけではなくクリックが発生する可能性があります。シングルトンを使用するとしますか?その後、マウスボタンを放すとそれを処分することができます –

+0

しかし、私はマウスボタンを押さないで、他のマウスで試してみました - 同じ効果。 –

+0

if文の中に 'Debug.Log'を入れて、ボタンが押されるたびにログが何回出てくるのかを確認してください。 – Programmer

答えて

3

はPlaneBehaviourスクリプトとしては、私はあなたがやっていると思ったし、前にこれを確認したかった何が平面

上で複数の(重複しない、交差しない )オブジェクトに接続されます答えを加える。ジョーの答えはうまくいくはずですが、これは悪いデザインです。

スクリプトが複数のオブジェクトに関連付けられているため、1つではなく複数のオブジェクトが表示されます。

ここでの適切な解決策は、入力から読み込んで関数を呼び出したり、必要に応じて別のスクリプトでイベントをトリガするスクリプトを1つ持つことです。 InputReaderという名前の新しいスクリプトを作成して、それと同じ名前を付けてください。if (Input.GetMouseButtonDown(0))...この新しいスクリプトは、1つのGameObjectにしか付けられません。空のGameObjectにアタッチするだけです。それでおしまい。

入力イベントがあるときにコードを2回実行するなどの問題を防ぐことができます。


さて、聞かせ; sがあなたがキーが押されたとき、あなたはゲームオブジェクトは、それに添付されたスクリプトは、その関数を呼び出しますことを見つけることができます別のゲームオブジェクトに接続された別のスクリプトを通知したいと言います。

GameObject obj = GameObject.Find("YourOtherObjectName"); 
Script script = obj.GetComponent<Script >(); 
script.notifyKeyPress(); 

私はゲームオブジェクトがクリックされたかを検出する方法はないこと オブジェクトが

をクリックされたゲームを検出できるようにするには、複数のゲームオブジェクトにそれを取り付けました。これは平面なので、3Dコライダーを持つ3Dオブジェクトだとします。これを行う方法についてはother投稿から6.For 3D Object (Mesh Renderer/any 3D Collider)をご覧ください。

+0

どのゲームオブジェクトがクリックされたかを検出できるように複数のゲームオブジェクトにアタッチしました - そのセンターにプレハブを作成します。しかし、あなたの答えは重要なことを私に思い出させました。私が 'this'オブジェクトをクリックしたかどうか確認する必要があります:)。しかし、私はそれを受け入れるだろう、それは私が尋ねた質問に答えるからです:)。 –

+0

これは一種のグリッドを持つ平面です。クリックした四角形を検出しようとしています。 –

+0

編集された回答のリンクを参照してください。私はすでに以前にそれに答えてきたので、新しい質問をする必要はありません。 – Programmer

1

keydownがすでに処理されているかどうかを検出するために、おそらくこれを行うことができます。

public class PlaneBehaviour : MonoBehaviour { 
    public GameObject ClickSymbol; 
    private static bool _keyDownHandled { get; set; } 

    public void Update() { 
     if (Input.GetMouseButtonDown(0)) { 
      if (_keyDownHandled) 
       Instantiate(ClickSymbol, Input.mousePosition, Quaternion.identity); 
      _keyDownHandled = true; 
     } 
     if (Input.GetMouseButtonUp(0)) { 
      _keyDownHandled = false; 
     } 
    } 
} 
+0

私はむしろこれを避けたいと思います - それぞれのUnityチュートリアルでは、この種のチェックを行う必要がない例を示しています。それが唯一の方法だと確信していますか? –

+0

@SzwornyDziąchすでに分かっているように、おそらくもっと良い方法があります。この方法は、基本的に単純なハックです。私は実際にunity3dを使用したことがないので、ここではそれに特有のものは見過ごされます。 –

関連する問題