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

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

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

Q&A

1回答

891閲覧

Unityでscrollviewとlistviewを組み合わせてprefabで動的に生成したらヒエラルキーで順序が乱れる

po_tato

総合スコア97

0グッド

0クリップ

投稿2018/04/20 09:57

タイトル通りなのですが、
Unityでscrollviewとlistを組み合わせてprefabで動的に生成したらヒエラルキーの順序が
なぜか乱れます。配列Aに10個のprefabが入れてあり、それを順番にcontentの子要素として入れているのに、なぜか配列Aの一番最後の要素がヒエラルキーでは一番最初に表示されています。あとは一つずつ順番がずれていってしまいます。
こちらのサイトでも似たようなことが記載してありましたが、私は動的にprefabを生成したいので、記事のように解決できませんでした。
scrollviewとlistの組み合わせは
こちらのサイトなどを参考にさせていただきました。

一番最後のcontentを親に指定している部分でおかしなことが起きているのでしょうか?

データはNCMBのデータベースから取得しています。

using System.Collections; using System.Collections.Generic; using UnityEngine; using NCMB; using UnityEngine.UI; using UnityEngine.SceneManagement; public class ScoreManager : MonoBehaviour { public List<string> nameList = new List<string>(); public List<int> scoreList = new List<int>(); public RectTransform content; public GameObject item_prefab; public Text textName; public Text textScore; public void getScoreRanking() { NCMBQuery<NCMBObject> query = new NCMBQuery<NCMBObject>("RankingClass");//RankingClassの query.OrderByDescending("Score"); // スコアを降順に並び替える query.Limit = 20; // 上位(数字の数)件のみ取得 query.FindAsync((List<NCMBObject> objList, NCMBException e) => { if (e == null) { //検索成功したら for (int i = 0; i < objList.Count; i++) { string name = System.Convert.ToString(objList[i]["userName"]); // 名前を取得 int score = System.Convert.ToInt32(objList[i]["Score"]); // スコアを取得 nameList.Add(name); scoreList.Add(score); //scrollviewのcontentの子要素を準備 GameObject item = GameObject.Instantiate(item_prefab) as GameObject; textName.text = nameList[i];// ListViewItem のインスタンス作成. textScore.text = scoreList[i].ToString(); RectTransform itemTransform = (RectTransform)item.transform; itemTransform.SetParent(content, false); // 作成したItemをContentの子要素に設定. } } }); }

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

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

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

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

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

guest

回答1

0

試してないので確実なことは言えませんが、
itemTransform.SetParent〜の次の行に
itemTransform.SetAsFirstSibling();またはitemTransform.SetAsLastSibling();を入れてみてください。
(前者は一番上に、後者は一番下に来るようにヒエラルキー上の並び順を変更するメソッドです)

これで正常に動作するなら「transform.SetParent〜は並び順を保証しない」と言えますし、
正常に動作しないならリンク先にあるようなバグ(?)の影響が考えられます。

投稿2018/04/20 11:36

sakura_hana

総合スコア11427

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

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

po_tato

2018/04/23 09:32

どちらも試してみましたが、配列全体が変わる(昇順、降順)のようには変わりましたが、一番最後のprefabが一番最初に来てしまう件は解決できませんでした。やはりバグなのでしょうか。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問