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

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

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

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

Q&A

解決済

2回答

9305閲覧

Unity Scene作成時にPrefabが表示されない

mattsuDev

総合スコア12

Unity

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

0グッド

0クリップ

投稿2016/05/18 07:53

編集2016/05/20 03:57

###問題点
スクロールビュー動的にアイテムを設定して表示させています。

Prefab化したアイテムを生成して表示しようとしていますが、Scene作成時に表示されません。
画面を回転させるなどすして、再描画をはさむと表示されるようになります。

Scene作成直後にきちんとアイテムを表示させるにはどうすれば良いでしょうか?

###該当のソースコード

using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using System.Collections; using System.Collections.Generic; public class ListViewController : MonoBehaviour { /// <summary> /// リストのベース /// </summary> public RectTransform itemContent = null; /// <summary> /// リストのレイアウト /// </summary> public GameObject itemPrefab = null; bool isLoad = false; float itemHeight; /// <summary> /// 表示アイテム管理用 /// </summary> List<Item> itemList = new List<Item>(); /// <summary> /// リストのアイテム /// </summary> struct Item { public string Title; } // Use this for initialization void Start () { // デバッグ用データのロード LoadDebugData(); // アイテムリストの生成 CreateItemList(); } // Update is called once per frame void Update () { } /// <summary> /// リストの生成 /// </summary> void CreateItemList() { if (!isLoad) { isLoad = true; foreach (var item in itemList) { // プレハブからインスタンスを生成 var obj = GameObject.Instantiate(itemPrefab) as GameObject; // テキストコンポーネントを取得 var itemName = obj.GetComponentInChildren<Text>(); itemName.text = item.Title; // 作成したオブジェクトを子として登録 obj.transform.SetParent(itemContent.transform, false); // ボタンを取得 var button = obj.transform.GetComponent<Button>(); // シーンのロード button.onClick.AddListener(() => SceneManager.LoadScene("Scenes/Sample")); } } } }

Debug時のInstantiateと、Hierarchyはスクリーンショットのようなイメージです。

イメージ説明

イメージ説明

ViewPortの値でリストが表示、非表示位置にあることがわかりました。

イメージ説明

イメージ説明

ListViewのVisibilityをPermanentにすることで表示できるようになりました。

イメージ説明

Contentの設定
イメージ説明

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

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

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

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

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

buibui80

2016/05/18 13:10

InstantiateとSetParentした状態でのヒエラルキー上の内容はどうなっています?
mattsuDev

2016/05/19 05:29

ご確認ありがとうございました。情報を追加いたしました。
guest

回答2

0

自己解決

シーン作成時にViewPortに初期値を設定することで解決できました。
ありがとうございました。

// Use this for initialization void Start () { // 作成時にviewportの位置が画面外になってしまうので、初期値を設定 var viewport = GameObject.Find("Viewport").GetComponent<RectTransform>(); viewport.anchorMax = new Vector2(1, 1); }

投稿2016/05/20 08:54

mattsuDev

総合スコア12

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

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

buibui80

2016/05/20 11:08

メニュー>GameObject>UI>Scroll Viewを追加した素の状態でしたら スクリプトでViewport の設定を一切しなくても ContentのVertical Layout GroupとContent Size Fitterを正しく設定すれば 問題なく表示されますよ。(Unity5.3.4f1で確認済みです) インスペクタの設定変更が意図しない影響を与えることがありますので 表示が変だと思ったらScroll Viewを作り直した方が早い時もあります。
mattsuDev

2016/05/24 06:10

ありがとうございます。 たしかに、初期値を設定しないと上手く動作しないのはおかしなことが起こっていそうですね。 作り直すのが早そうですね。
guest

0

rectのwidth と sizeDeltaのx が 0 になっているので、横幅が正しく表示されていないようですね。

  1. キャプチャ画像を見た感じだとスクロールバーの縦方向は問題ないように思えますがどうでしょうか?
  2. ListViewItem(Clone)のRectTransformがインスペクタではどのように表示されていますか?
  3. 元となるPrefabのRectTransformはインスペクタでどのようになっていますか?

ちなみにスクリプトを使用せずにヒエラルキー上へ
手動で Content に Prefab を複数配置したらちゃんと表示することはできますか?

投稿2016/05/19 07:17

buibui80

総合スコア1033

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

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

mattsuDev

2016/05/19 09:20

2.ListViewItem(Clone)のRectTransformがインスペクタではどのように表示されていますか? を確認していたところ、ViewPortの値がリストが隠れるような値になっていることがわかりました。 調べてみたところ、ListViewのVisibilityをPermanentに設定すると意図通りに表示されるようになりました。 この対応方法で問題ないでしょうか?
buibui80

2016/05/19 16:04

意図通りに表示されたとの事で良かったですが、 Permanentにするとスクロールバーの裏までListViewItemが描画されてしまうので、 ListViewItemのレイアウトを調整する必要があると思います。 (Auto Hide And …を選択した状態でSpacingを変更すると分かります) ちなみに、 ContentにはVertical Layout GroupとContent Size Fitterを設定しているのでしょうか?
mattsuDev

2016/05/20 03:56

> Permanentにするとスクロールバーの裏までListViewItemが描画されてしまうので、 ListViewItemのレイアウトを調整する必要があると思います。 たしかに、スクロールバーの裏にまで描画されることがわかりました。 ありがとうございます。 > ContentにはVertical Layout GroupとContent Size Fitterを設定しているのでしょうか? はい、設定しています。
buibui80

2016/05/20 06:19

Horizontal FitをPreferred Sizeにすることで意図した表示にならないでしょうか?
buibui80

2016/05/20 07:21

間違えました、Horizontal FitをUnconstrainedでどうでしょうか? また、Vertical Layout GroupのChild Force ExpandのWidthにチェックを入れてみてください。 設定変更の順番によってはRectTransformの値に意図しない変化が生じることがあるので、 LeftとRightが0になっているか確認が必要になります。
mattsuDev

2016/05/24 06:08

返信遅くなってしまい、失礼いたしました。 アドバイス通り作業をしてみましたが、変わらずでした。 作り直した方が良さそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問