質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2513閲覧

【Unity】オブジェクトドラッグとコンテキストメニュー表示選択のマウス重なり(追記)

DY2peace

総合スコア20

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/06/05 11:09

編集2020/06/15 11:52

#ご相談内容
AssetStoreで購入した『Dynamic Right Click Menu』でメニューを選択する際、裏側に隠れているオブジェクトを左クリック選択してしまい、すでに用意してあるオブジェクトドラッグが起きてずれてしまう問題が生じています。
購入したAssetの中身を見る限り、ContextMenuを使っているみたいですが、このコンテキストメニューが表示されてなおかつ、選択中のときに、オブジェクトドラッグのスクリプトを無効にしたいと考えております。
##追記内容
SelectorというGameObjectを左クリックで、選択したときに裏側に隠れているオブジェクトを選択してしまうみたいです。このSelectorはメニュー表示のなかの青網掛け部分に相当します。

↓右クリックメニュー
イメージ説明

↓オブジェクトに重なった位置で、右クリックメニューを表示させメニュー選択したときに、裏側のオブジェクトが押されてしまう。
イメージ説明メージ説明](21a7cfec489003e7d201bee87411b27e.jpeg)説明](c8a4f1027f9fdc7700d45d81b5bd25b1.jpeg)ージ説明](aa3ea436097bf4c01cf0e18546a033a3.jpeg)8d665cbbc413c4ad791369a4fed91ef.jpeg)

 この購入Assetの構成が複雑で、理解できてないことが多く、うまく相談できていないかもしれませんが、コンテキストメニューでのマウス左クリックかぶりの解消方法などの一般的なテクニックなどご教示いただけると幸いです。
(”コンテキストメニューが非表示の時”の条件文や別スクリプトからコンテキストメニュー状態を拾う方法など)

#####右クリックメニューのコード
予めPrefabで用意されたContextMenuを呼び出しているみたいです。

public class ExampleMenu : MonoBehaviour { public ContextMenu prefab; ContextMenu mainMenu; void Start() { mainMenu = Instantiate<GameObject>(prefab.gameObject).GetComponent<ContextMenu>();//create a new object mainMenu.transform.SetParent(transform); mainMenu.transform.localScale = Vector3.one; mainMenu.transform.localPosition = Vector3.zero; mainMenu.AddMenuItem("Clear", Clear);//show this item opens a sub menu } void Update() { if(Input.GetMouseButtonDown(1))//if right clicking { ContextMenu.HideAllMenus();//hide other menus mainMenu.ShowAtMousePosition();//show the menu } } void Clear() { Debug.Log("Cleared"); }

######ContextMenuのプレファブ構成
イメージ説明

#####オブジェクトドラッグ コード
オブジェクトにコライダーを用意して移動。

{ Vector3 objectPointInScreen = Camera.main.WorldToScreenPoint(this.transform.position); Vector3 mousePointInScreen = new Vector3(Input.mousePosition.x, Input.mousePosition.y, objectPointInScreen.z); Vector3 mousePointInWorld = Camera.main.ScreenToWorldPoint(mousePointInScreen); mousePointInWorld.z = this.transform.position.z; this.transform.position = mousePointInWorld; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

右クリックでメニューを開いたタイミングにフラグを追加し、オブジェクト選択の方でメニュー開のフラグが立っている際は処理が通らないようにしてはどうでしょうか?

以下追記 06/08
ひとまずmainMenu.csに対して以下を追記。内容としては先述したメニューを開いているかどうかのフラグを追加、メニュー開時にフラグをTrueにする処理を追記します。

cs

1public class mainMenu : MonoBehaviour 2{ 3 public bool CheckMenuStatus; 4 void Start() 5 { 6 CheckMenuStatus = false; 7 } 8 void ShowAtMousePosition() 9 { 10 CheckMenuStatus = true; 11 } 12}

あと、恐らく同じmainMenu.cs内にメニューを閉じる処理があると思うので、そちらのメソッド内にCheckMenuStatus = false;と追記してください。これでメニューが開いたときはTrue、開いていない時はFalseの状態となります。

この上でオブジェクトドラッグのスクリプト内に「CheckMenuStatusがTrueでない時のみオブジェクト操作可能」とします。なので、

cs

1 public mainMenu MenuCS; //mainMenu.csを取得するための変数 2 3 if(MenuCS.CheckMenuStatus != true)//CheckMenuStatusがTrueでない時のみ以下の処理を実行する 4 { 5 Vector3 objectPointInScreen 6 = Camera.main.WorldToScreenPoint(this.transform.position); 7 8 Vector3 mousePointInScreen 9 = new Vector3(Input.mousePosition.x, 10 Input.mousePosition.y, 11 objectPointInScreen.z); 12 13 Vector3 mousePointInWorld = Camera.main.ScreenToWorldPoint(mousePointInScreen); 14 mousePointInWorld.z = this.transform.position.z; 15 this.transform.position = mousePointInWorld; 16 }

とすれば恐らくメニューが開いている時にオブジェクトとメニューが重なっていても、オブジェクトは選択できないようになっているはずです。

投稿2020/06/08 00:46

編集2020/06/08 02:06
Y0241-N

総合スコア1066

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DY2peace

2020/06/08 00:57

大変恐れ入りますが、サンプルでコードを記載していただいてもよろしいでしょうか。 知識不足で申し訳ございません。
Y0241-N

2020/06/08 01:26

サンプル出すにはmainMenu.ShowAtMousePosition();の中にフラグの条件を書かないと上手くいかなさそうなので、現状では無理です...。 書き方と挿入箇所について詳細に書いておきます。
DY2peace

2020/06/08 03:13

解説ありがとうございます。 自分の勘違いがあってもう一工夫必要そうですが、ご教示いただいた方法の応用でうまくできそうです。 ご協力いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問