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

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

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

661閲覧

GameObjectにMeshFilterの有無の認識

DY2peace

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2020/08/23 01:19

編集2020/09/08 11:42

前提・実現したいこと

 以前、相談させていただいた内容ですが、AssetStore『DynamicRightClickMenu』を使って検討しております。

イメージ説明

オブジェクトを選択したときに、赤くオブジェクトが代わり、そのときに右クリックを押すとこのオブジェクト専用のメニューが表示します。
イメージ説明

オブジェクトが非選択時(どこにも赤いオブジェクトがないとき)、右クリックを全体メニューを表示します。
イメージ説明

発生している問題・エラーメッセージ

オブジェクトに赤色がないときを探してから、全体メニューを表示させてます。
その際、空のGameObjectもしくはアセンブリとして以下のように構成した場合、全体メニューが表示されてこない問題に直面しております。

イメージ説明

該当のソースコード

右クリックを押したとき

C#

1private bool isRed;//オフジェクトクリックかぶり防止用。赤色認識 2 3void Update() 4 { 5 if(Input.GetMouseButtonDown(1)) 6 { 7 //オブジェクト選択(赤色)がないときに、右クリックメニューが出される 8 isRed =false; 9 foreach(Transform child in ParentModel) 10 { 11 if(child.GetComponent<Renderer>().material.color == Color.red) 12 { 13 isRed = true; 14 break; 15 } 16 } 17 if(!isRed)//子オブジェクトに赤がないとき 18 { 19 ContextMenu.HideAllMenus();//他のオブジェクトメニューを隠す 20 mainMenu.ShowAtMousePosition();// 全体メニューの表示 21 } 22 } 23

実現したいこと

 マテリアルが割り当てられてない空オブジェクト(MeshFilterなし)もしくはアセンブリ用に使われているGambeObjectをスルーして、右クリック全体メニューが表示されるようにしたいです。

###追記(2020年9月8日)
わかりにくい質問で申し訳ございません。GameObjectの中にMeshFilterがあるかどうかをスクリプトで認識させたいです。

C#

1 if(!isRed)//子オブジェクトに赤がないとき 2 && ?????//『GameObject内にMeshFilterがないとき』という条件を入れたい 3 { 4 ContextMenu.HideAllMenus();//他のオブジェクトメニューを隠す 5 mainMenu.ShowAtMousePosition();// 全体メニューの表示 6 }

でうまく動くのかなと思っています。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

GetComponentして、nullだったらコンポーネントなしと判断でいけませんか?

cs

1var hoge = GetComponent<MeshFilter>(); 2if(hoge == null) { Debug.Log("MeshFilter not found");}

投稿2020/09/09 00:25

hogefugapiyo

総合スコア3302

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

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

DY2peace

2020/09/09 02:24

ありがとうございました。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問