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

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

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

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

Unity

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

Q&A

1回答

2106閲覧

Unity Scroll Viewに動的にボタンを追加する方法

M.hosokawa

総合スコア19

C#

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

Unity

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

0グッド

0クリップ

投稿2018/06/26 23:01

UnityでScroll View内に動的にボタンを追加する動きを実装しています。

エミュレーター上では追加されているのですが、実機でビルドすると表示されません。
以下、原因特定するために試したことです。全て失敗しました。

1.動的な追加に問題がある可能性がある。
予め、Content内にボタンを配置しました。

2.ボタンの表示がうまくいかないため、テキストを追加
こちらもダメでした。

下記のソースコードは、QRコードを読み取った際にQR情報をContent内に動的に追加する動きを実装しています。
描画順はCanvas→Panel→Scroll View→ViewPort→Contentです。
表示されない原因をご教示頂きたいです。
よろしくお願いいたします。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using ZXing; 6using ZXing.QrCode; 7 8public class QRReader : MonoBehaviour { 9 10 public int height = 1920; 11 public int width = 1080; 12 public int fps = 60; 13 public string strqrText; 14 private WebCamTexture webCamTexture; 15 public PQRCodeManager qrManager; 16 public GameObject QRList; 17 RawImage rawImage; 18 19 [SerializeField] 20 GameObject goQRTextResult; 21 Transform QRContent; 22 private List<GameObject> cloneList = new List<GameObject>(); 23 24 // Use this for initialization 25 void Start () { 26 QRList = Resources.Load ("prefab/StepButton") as GameObject; 27 goQRTextResult = GameObject.FindGameObjectWithTag ("parent"); 28 WebCamDevice[] devices = WebCamTexture.devices; 29 //webカメラの検索 30 for (int i = 0; i < devices.Length; i++) { 31 Debug.Log (devices [i].name); 32 if (devices [i].name == null) { 33 break; 34 } 35 } 36 WebCamDevice userWebCamDevice = WebCamTexture.devices [0]; 37 rawImage = this.GetComponent<RawImage> (); 38 webCamTexture = new WebCamTexture (userWebCamDevice.name, height, width, fps); 39 40 rawImage.texture = webCamTexture; 41 webCamTexture.Play (); 42 43 this.qrManager = new PQRCodeManager (); 44 } 45 46 // Update is called once per frame 47 void Update () { 48 strqrText = this.qrManager.read (webCamTexture); 49 createPrefab (strqrText); 50 } 51 52 //子オブジェクトの作成 53 void createPrefab(string strqrText){ 54 55 if (strqrText.Equals ("-1")) { 56 //Debug.Log ("The value is -1"); 57 }else{ 58 //Scroll Viewに要素を追加する 59 GameObject clone = Instantiate (QRList) as GameObject; 60 cloneList.Add (clone); 61 62 clone.transform.Find ("ProcessText").GetComponent<Text> ().text = strqrText; 63 clone.transform.name = strqrText; 64 clone.transform.SetParent (goQRTextResult.transform, false); 65 } 66 } 67} 68

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

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

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

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

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

sakura_hana

2018/06/27 01:35

Contentと子オブジェクトの位置とサイズはどうなっていますか? Debug.Logを仕掛けるなどして、正しい値になっているか確認してみてください。(子オブジェクト追加後、1フレーム以上待ってから確認すると確実です)また、Unityバージョンと「実機」情報も念の為追記お願いします。
M.hosokawa

2018/06/27 01:37

コメントありがとうございます。
M.hosokawa

2018/06/27 01:39

Unityのバージョン:2017.3.1f1 実機iPad mp1l2j/aです。
guest

回答1

0

同じ状況か分からないですが、
「ContentにLayoutGroupを配置、ContentSizeFitterにより子オブジェクトの量に応じてContentのサイズ変更」
という状況下で一度だけ同じ状況になりました。

色々試したのですが最終的に
「子オブジェクトの生成後、1フレーム後にContentの大きさ(RectTransformのSizeDelta)をゼロにする」
という方法で正常に動作しました。

何らかの理由でリサイズする為の更新処理が走っていない
→一旦無理矢理サイズをゼロにする
→更新処理が走り内部の再計算が行われ正しい大きさと整列が実施される
という形なのかなと思います。ご参考までに。

投稿2018/07/02 02:00

sakura_hana

総合スコア11427

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

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

M.hosokawa

2018/07/03 22:31

回答ありがとうございます。 ここ以外でも質問したところ、Unityのアップデートで解決する場合があるということでアップデートしたところ治りました。 ご回答いただいた方法も試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問