非アクティブ状態で待機している複数の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
スクリプトではなくLayoutGroupを使ったやり方でも構いませんか?

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

回答1件
あなたの回答
tips
プレビュー