bugfix> c# > 投稿

プレイヤーが私のゲームで獲得できるすべての実績のリストを作成したいと思います。次のコードを使用して、サーバーから実績を取得し、Unityでスクロールリストを作成して表示しますが、最初の行のみが表示されます。すべての名前、説明、通貨を表示したいと思います。また、bool earned変数がtrueの場合、プレーヤーが獲得した実績の色を変更したいと思います。

表示したいリストの画像と、階層内にあるスクロールビューのスクリーンショットの下に添付します。

new GameSparks.Api.Requests.LogEventRequest ()
        .SetEventKey ("LISTACHIEVEMENTS")
        .Send ((response) => {
            if(!response.HasErrors)
            {
                Debug.Log("List Achivements Loaded Sucessfully...");
                GSData scriptData = response.ScriptData;
                List<GSData> achievements = scriptData.GetGSDataList("achievements"); //retrieve the array of objects
                for (int i = 0; i < achievements.Count; i++)
                {
                    string name = achievements[i].GetString("name");
                    string description = achievements[i].GetString("description");
                    int? currency1Award = achievements[i].GetInt("currency1Award");
                    bool? earned = achievements[i].GetBoolean("earned");
                    Debug.Log(name);
                    Debug.Log(description);
                    Debug.Log(currency1Award);
                    Debug.Log(earned);
                    GameObject tempFile = Instantiate (filePrefab, contentRef.transform);
                    Text tempName = tempFile.transform.GetChild(0).GetComponent<Text>();
                    Text tempDescription = tempFile.transform.GetChild(1).GetComponent<Text>();
                    Text tempCurrency1Award = tempFile.transform.GetChild(2).GetComponent<Text>();
                    tempName.text = name;
                    tempDescription.text = description;
                    tempCurrency1Award.text = currency1Award.ToString();
                }
            }
            else
            {
                Debug.Log("Error Loading Achivements...");
            }
        });

回答 1 件
  • 要素(名前、説明、通貨)を同じUITextに割り当てます。 20個の数字(0,1,2 ... 19)を保存しようとしているようですが、保存する変数(int)は1つしかありません。

    forループで必要なだけテキストを作成してください。 以下に例を示します。

    public GameObject filePrefab; // to be able to instantiate new "files"
    ...
    for (...)
    {
        // Create the file and assign the valuse
        GameObject tempFile = Instantiate( filePrefab);
        Text tempName = tempFile.GetChild(0).GetComponenet<Text>();
        Text tempDescription = tempFile.GetChild(1).GetComponenet<Text>();
        Text tempCurrency1Award = tempFile.GetChild(2).GetComponenet<Text>();
        // Here you can set there position, etc.
        ...
        // Assign the values
        tempName.text = name;
        tempDescription.text = description;
        tempCurrency1Award.text = currency1Award.ToString();  
    }
    
    

    お役に立てれば。

あなたの答え