にここで私はとの問題を抱えているコードです。その動作を防ぐには(オブジェクトを1回だけ作成する)?はUnityが代わりに1の複数のオブジェクトをインスタンス化し、クリック
答えて
は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)をご覧ください。
どのゲームオブジェクトがクリックされたかを検出できるように複数のゲームオブジェクトにアタッチしました - そのセンターにプレハブを作成します。しかし、あなたの答えは重要なことを私に思い出させました。私が 'this'オブジェクトをクリックしたかどうか確認する必要があります:)。しかし、私はそれを受け入れるだろう、それは私が尋ねた質問に答えるからです:)。 –
これは一種のグリッドを持つ平面です。クリックした四角形を検出しようとしています。 –
編集された回答のリンクを参照してください。私はすでに以前にそれに答えてきたので、新しい質問をする必要はありません。 – Programmer
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;
}
}
}
私はむしろこれを避けたいと思います - それぞれのUnityチュートリアルでは、この種のチェックを行う必要がない例を示しています。それが唯一の方法だと確信していますか? –
@SzwornyDziąchすでに分かっているように、おそらくもっと良い方法があります。この方法は、基本的に単純なハックです。私は実際にunity3dを使用したことがないので、ここではそれに特有のものは見過ごされます。 –
- 1. 複数の行の代わりに1行を返します
- 2. は、GWTのKeyUpHandlerは、複数回の代わりに、1
- 3. は、複数のTCPClientsを作成する代わりに、1
- 4. クラスの代わりに、インスタンス
- 5. 複数のオブジェクトのEnumerable.Singleメソッドの代わりに?
- 6. LibGdx複数のオブジェクトの1つまたは複数のインスタンス
- 7. 複数のパラメータダッシュの代わりにスラッシュ
- 8. 代わりに複数のカラーバー
- 9. ポインタアドレスは16進数の代わりに1を返します
- 10. 関数はbooleanの代わりにオブジェクトを返します
- 11. Zend_Db_Tableは - 代わりにオブジェクト
- 12. (?、5、1、1)の代わりにconv2dの出力(?、5,1,1)の代わりに
- 13. Unity - ループのオブジェクトを互いに間隔をあけてインスタンス化
- 14. Objective-Cのconstインスタンス変数の代わりに?
- 15. 複数の代わりに1つのgeom_smooth曲線をプロットする
- 16. マッチ関数は、2つの要素の代わりに1
- 17. Java FreeMarker:オブジェクトのインスタンスの代わりに$ {variable}をコレクションに置き換えよう
- 18. INSERT - 代わりに、1列
- 19. 代わりに各1
- 20. ハイチャート:。私が代わりの1
- 21. 1つだけを動かす代わりに複数のオブジェクトを作成するPygame
- 22. シリアライザの代わりにオブジェクトを返す
- 23. GETの代わりにオブジェクトを使う
- 24. オブジェクトの代わりにマングースを返す
- 25. Unity - Nullを返すインスタンス化されたオブジェクトのGetComponent
- 26. スタートはゼロの代わりに、1でカウント:数要素
- 27. 複数のIDに代わるものはありますか?
- 28. 2の代わりに1つのインスタンスでメモリを上書きする
- 29. ボタンをクリックする代わりにキーダウン
- 30. ループの代わりにnumpyのベクトル化
マウスボタンを押し続けると、1だけではなくクリックが発生する可能性があります。シングルトンを使用するとしますか?その後、マウスボタンを放すとそれを処分することができます –
しかし、私はマウスボタンを押さないで、他のマウスで試してみました - 同じ効果。 –
if文の中に 'Debug.Log'を入れて、ボタンが押されるたびにログが何回出てくるのかを確認してください。 – Programmer