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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

634閲覧

Unity)PrefabのButtonを条件で表示、非表示に

navesanta

総合スコア198

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2020/09/11 09:03

Listを作成するため
下記のPrefabを作成してvideoListを参照してForで流し込みました。

List<videoList>
string FileNameNum(ファイル名)
int QFlag(0:ButtonA表示 1;ButtonB表示)

ListPrefab
L Text
L Image
L ButtonA
L ButtonB

TextとImageは配列で作成してGetComponentInChildrenでうまく表示されました。
ButtonAとBは条件によって表示したくその場合、SetActiveを使うので
GameObjectで参照しなければならずGetComponentInChildrenが使えません。
そこで調べたところchild.gameObject()でButtonを参照できそうなので
下記コードを記述しました。

for(int i=0; i < _videoList.Count; i++) { var item = GameObject.Instantiate(ListPrefab) as GameObject; item.transform.SetParent(transform, false); //Number Display item.GetComponentInChildren<Text>().text = (i+1).ToString("D3"); //Image Display images = item.GetComponentsInChildren<Image>(); FileNameNum = _videoList[i].FileNameNum; FilePath = Application.persistentDataPath + "/" + FileNameNum + ".png"; images[1].sprite = LoadSprite(FilePath); //Button Display QFlag = _videoList[i].QFlag; buttonObject = item.child.gameObject(); switch(QFlag) { case 0: buttonObject[2].SetActive(true); buttonObject[3].SetActive(false); break; case 1: buttonObject[2].SetActive(false); buttonObject[3].SetActive(true); break; } }

しかし下記エラーが出ます。
どうすれば良いのでしょうか?

Assets\Scripts\VideoListDisplay.cs(35,37): error CS1061: 'GameObject' does not contain a definition for 'child' and no accessible extension method 'child' accepting a first argument of type 'GameObject' could be found (are you missing a using directive or an assembly reference?)

環境)
PC: Windows10
Unity2019.4.0f1
言語:C#

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

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

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

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

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

guest

回答1

0

ベストアンサー

GameObjectで参照しなければならずGetComponentInChildrenが使えません。

いいえ、使えます。

C#

1 GameObject gObj =.GetComponentInChildren<>().gameObject;

エラーについては

C#

1 buttonObject = item.child.gameObject();

child.gameObject()は存在すらしていないので、以下のように直せばよろしいかと思います。

C#

1 buttonObject = item.transform.GetChild(0).gameObject;

投稿2020/09/11 09:34

fiveHundred

総合スコア10152

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

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

navesanta

2020/09/11 23:30

上記の方法を試してみましたが子要素単体へのGameObjectへの参照はできますが Prefabの複数の子要素(GameObject)を参照にする必要があるのでエラーになります。
navesanta

2020/09/11 23:33

実際にbuttonObject = item.transform.GetChild(0).gameObject;を使うと 下記エラーが出ます。 error CS0029: Cannot implicitly convert type 'UnityEngine.GameObject' to 'UnityEngine.GameObject[]
navesanta

2020/09/11 23:38

GameObject gObj = ~.GetComponentInChildren<~>().gameObject; またGetComponentInChildrenは子要素の単体コンポーネントを参照するときに 使うと思うので複数の場合、GetComponentsInChildren(sが入る)になると思いますが そもそもGameObjectはコンポーネント要素ではないのでおかしくないでしょうか?
navesanta

2020/09/12 00:49

GameObjectを配列ではなく個別にしたところうまくいきました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問