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

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

新規登録して質問してみよう
ただいま回答率
85.50%
UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

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

Q&A

解決済

1回答

15630閲覧

Unity-動的にScrollViewにUIを並べる

退会済みユーザー

退会済みユーザー

総合スコア0

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Unity

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

0グッド

0クリップ

投稿2018/01/31 07:18

非アクティブ状態で待機している複数のUI要素(今回はText)の中から、入力に応じていくつかを選び、ScrollView内に順に並べる機能を実装したいです。

イメージとしては下の画像のように、Textを3つ並べる場合は左のScrollView、5つ並べる場合は右のScrollViewになるよう、並べる要素数に応じてScrollViewのcontentの長さを調節しつつ、配列に格納した順に上から並べる感じです。
イメージ説明

この実装のために以下のコードを書いたのですが、これでプレイするとした画像のように、スクロールバーが消えて整列位置もズレてしまったり、そもそも元の位置(0,0,0)から動かなかったりと、思う通りに動いてくれません。

C#

1public class test : MonoBehaviour { 2 3 public Text[] texts;//左SVに並べるテキスト群です。 4 public Text[] texts2;//右SV用です。 5 6 public GameObject content;//左SVのcontentです。 7 private RectTransform contentRT;//左SVのcontentのRectTransformです。 8 public GameObject content2; 9 private RectTransform contentRT2; 10 11 private List<Text> TextList = new List<Text>();//実際に並べるテキストはここに格納します。 12 private List<Text> TextList2 = new List<Text>(); 13 14 // Use this for initialization 15 void Start () { 16 17 foreach(Text obj in texts)//テキスト群は非アクティブで待機します。 18 { 19 obj.gameObject.SetActive(false); 20 } 21 22 contentRT = content.GetComponent<RectTransform>(); 23 24 foreach (Text obj in texts2) 25 { 26 obj.gameObject.SetActive(false); 27 } 28 29 contentRT2 = content2.GetComponent<RectTransform>(); 30 } 31 32 // Update is called once per frame 33 void Update () { 34 35 if (Input.GetMouseButtonDown(0)) 36 { 37 ThreeTextsSetting(); 38 } 39 40 if (Input.GetMouseButtonDown(1)) 41 { 42 FiveTextsSetting(); 43 } 44 45 } 46 47 48 private void ThreeTextsSetting()//左SVでなされ 49 { 50 TextList.Add(texts[0]); 51 TextList.Add(texts[1]); 52 TextList.Add(texts[2]); 53 54 contentRT.sizeDelta = new Vector2(0, 50 * 4); 55 56 int count = 0; 57 58 foreach(Text txt in TextList) 59 { 60 count++; 61 62 txt.gameObject.SetActive(true); 63 64 var txtRT = txt.GetComponent<RectTransform>(); 65 txtRT.localPosition = new Vector3(0, -50 * count,0); 66 } 67 } 68 69 private void FiveTextsSetting() 70 { 71 TextList2.Add(texts2[2]); 72 TextList2.Add(texts2[0]); 73 TextList2.Add(texts2[4]); 74 TextList2.Add(texts2[1]); 75 TextList2.Add(texts2[5]); 76 77 contentRT2.sizeDelta = new Vector2(0, 50 * 6); 78 79 int count = 0; 80 81 foreach (Text txt in TextList2) 82 { 83 count++; 84 85 txt.gameObject.SetActive(true); 86 87 var txtRT = txt.GetComponent<RectTransform>(); 88 txtRT.localPosition = new Vector3(0, -50 * count, 0); 89 } 90 } 91} 92

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

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

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

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

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

sakura_hana

2018/01/31 07:46

スクリプトではなくLayoutGroupを使ったやり方でも構いませんか?
退会済みユーザー

退会済みユーザー

2018/02/01 02:10

前回に続いてありがとうございますm(__)m LayoutGroupでも大丈夫です。よろしくお願いします。
guest

回答1

0

ベストアンサー

LayoutGroupを使ったやり方です。

■Contentオブジェクト
・Vertical Layout Group付与、パラメータはお好みで
・Content Size Fitter付与、Vertical FitをPreferred Sizeに
・子オブジェクトとしてTextオブジェクトを配置

これでとりあえず自動整列されます。

参考:【Unity】uGUIの自動レイアウトが分かりにくいと評判なので解説してみる - テラシュールブログ

投稿2018/02/01 06:43

sakura_hana

総合スコア11425

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

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

退会済みユーザー

退会済みユーザー

2018/02/03 12:18

回答ありがとうございます。 参考のurlその他を調べつついじってみたところ、ひとまず思い通りの実装ができました。 適した設定にしきれていない部分もあるのでしょうが、なんとかなりそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問