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

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

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

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

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

退会済みユーザー

退会済みユーザー

総合スコア0

UI

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0リアクション

0クリップ

12937閲覧

投稿2018/01/31 07:18

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

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

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

C#

public class test : MonoBehaviour { public Text[] texts;//左SVに並べるテキスト群です。 public Text[] texts2;//右SV用です。 public GameObject content;//左SVのcontentです。 private RectTransform contentRT;//左SVのcontentのRectTransformです。 public GameObject content2; private RectTransform contentRT2; private List<Text> TextList = new List<Text>();//実際に並べるテキストはここに格納します。 private List<Text> TextList2 = new List<Text>(); // Use this for initialization void Start () { foreach(Text obj in texts)//テキスト群は非アクティブで待機します。 { obj.gameObject.SetActive(false); } contentRT = content.GetComponent<RectTransform>(); foreach (Text obj in texts2) { obj.gameObject.SetActive(false); } contentRT2 = content2.GetComponent<RectTransform>(); } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { ThreeTextsSetting(); } if (Input.GetMouseButtonDown(1)) { FiveTextsSetting(); } } private void ThreeTextsSetting()//左SVでなされ { TextList.Add(texts[0]); TextList.Add(texts[1]); TextList.Add(texts[2]); contentRT.sizeDelta = new Vector2(0, 50 * 4); int count = 0; foreach(Text txt in TextList) { count++; txt.gameObject.SetActive(true); var txtRT = txt.GetComponent<RectTransform>(); txtRT.localPosition = new Vector3(0, -50 * count,0); } } private void FiveTextsSetting() { TextList2.Add(texts2[2]); TextList2.Add(texts2[0]); TextList2.Add(texts2[4]); TextList2.Add(texts2[1]); TextList2.Add(texts2[5]); contentRT2.sizeDelta = new Vector2(0, 50 * 6); int count = 0; foreach (Text txt in TextList2) { count++; txt.gameObject.SetActive(true); var txtRT = txt.GetComponent<RectTransform>(); txtRT.localPosition = new Vector3(0, -50 * count, 0); } } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

sakura_hana

2018/01/31 07:46

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

退会済みユーザー

2018/02/01 02:10

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

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

UI

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。