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

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

ただいまの
回答率

90.83%

  • Unity2D

    623questions

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

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 83

Kw6ZG2sV

score 55

タイトル通りなのですが、
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の子要素に設定.


                }
            }
        });
    }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/23 18:32

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

    キャンセル

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

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Unity2D

    623questions