unity2Dでゲームを作成しています。
全2ステージのゲームです。
ステージごとのスコアを登録し、スコアシーンでスコアをハイスコア順で
上位の10個を表示させてスクロールできるようにし、
ステージ1とステージ2のスコアをわけたいと考えているのですが、
スコアシーンでの表示がうまく行きません。スコアシーンはスコアシーン1とスコアシーン2に分けております。
ステージ1だけの場合はうまく行ったのですが、ステージ1のデータを複製をしてステージ2のスコアデータを作成とした際にできませんでした。
Listで管理をしており
、スコアの登録まではうまく行っていると思うのですが、スコアシーンでの表示がされない状態になっております。
EnhancedScrollerを用いて実装をしております。
こちらのページを参考にしました。
また、Ranktext(ステージ1)とRanktext2(ステージ2)をpfefab化し、CellViewを双方にアタッチしております。一度ゲームを再生した際には、スクロール内にその子要素にあるテキスト自体は表示がされますが、更新がされておらず、同じ数値(前にプレイした際の数値)が表示されています。
どなたかアドバイスをいただけますと幸いです。
ゲーム終了時のスコアの保存(ステージ1とステージ2)
(ゲームの終了の際にスコア保存をして更新をしております。)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6using System; 7 8public class EndSceneManager : MonoBehaviour 9{ 10List<int> highScores = new List<int>(); 11 //第二ステージの場合 12 List<int> highScores2 = new List<int>(); 13 14 15 [SerializeField] 16 Text scoreText, clearText; 17 string[] keyList = new string[10]; 18 19 string[] keyList2 = new string[10]; 20 21 int scoreNumber; 22 int scoreNumber2; 23 24 25//スコアの保存 26public void Return() 27 { 28//ステージ1の場合 29 if (PlayerPrefs.GetInt("secondLap", 0) == 0) 30 { 31 // playerprefsからscoreNumberの分(1~10)だけハイスコアを取ってくる 32 for (int i = 0; i < PlayerPrefs.GetInt("scoreNumber"); i++) 33 { 34 highScores.Add(PlayerPrefs.GetInt(keyList[i])); 35 // Debug.Log("high score add from pref cycle"); 36 } 37 // 今回のスコアをハイスコアに追加する 38 // if finishFlag == true 39 highScores.Add(GameManager.score); 40 // ハイスコアをソート 41 // highScores.Sort((int x, int y) => { return y - x; }); 42 highScores.Sort((x, y) => y - x); 43 44 if (highScores.Count > 10) 45 { 46 highScores.RemoveAt(10); 47 // Debug.Log("memorized score is more than 10"); 48 } 49 // スコアの数を0にリセット 50 scoreNumber = 0; 51 // ハイスコアをplayerprefsに記録 52 // ハイスコアの個数分scoreNumberをインクリメント 53 for (int i = 0; i < highScores.Count; i++) 54 { 55 // Debug.Log(highScores[i]); 56 PlayerPrefs.SetInt(keyList[i], highScores[i]); 57 scoreNumber++; 58 // Debug.Log("set prefs high score cycle"); 59 } 60 // ハイスコアの個数をplayerprefsに記録 61 PlayerPrefs.SetInt("scoreNumber", scoreNumber); 62 SceneManager.LoadScene("MainScene"); 63 64 } 65 66 67//ステージ2の場合 68 else if (PlayerPrefs.GetInt("secondLap", 0) == 1) { 69 70 // playerprefsからscoreNumberの分(1~10)だけハイスコアを取ってくる 71 for (int i = 0; i < PlayerPrefs.GetInt("scoreNumber2"); i++) 72 { 73 highScores2.Add(PlayerPrefs.GetInt(keyList2[i])); 74 // Debug.Log("high score add from pref cycle"); 75 } 76 // 今回のスコアをハイスコアに追加する 77 // if finishFlag == true 78 highScores2.Add(GameManager.score); 79 // ハイスコアをソート 80 // highScores.Sort((int x, int y) => { return y - x; }); 81 highScores2.Sort((x, y) => y - x); 82 83 if (highScores2.Count > 10) 84 { 85 highScores2.RemoveAt(10); 86 // Debug.Log("memorized score is more than 10"); 87 } 88 // スコアの数を0にリセット 89 scoreNumber2 = 0; 90 // ハイスコアをplayerprefsに記録 91 // ハイスコアの個数分scoreNumberをインクリメント 92 for (int i = 0; i < highScores2.Count; i++) 93 { 94 // Debug.Log(highScores[i]); 95 PlayerPrefs.SetInt(keyList2[i], highScores2[i]); 96 scoreNumber2++; 97 // Debug.Log("set prefs high score cycle"); 98 } 99 // ハイスコアの個数をplayerprefsに記録 100 PlayerPrefs.SetInt("scoreNumber2", scoreNumber2); 101 SceneManager.LoadScene("MainScene"); 102 103 104 105 } 106 } 107 108 109 110
スコアの表示(スコアシーンのステージ1のスクリプト)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class HighScoreManager : MonoBehaviour 7{ 8 List<GameObject> highScoreTexts = new List<GameObject>(); 9 10 void Start() 11 { 12 // Debug.Log(PlayerPrefs.GetInt("scoreNumber")); 13 14 for (int i = 0; i < PlayerPrefs.GetInt("scoreNumber"); i++) 15 { 16 // Debug.Log(PlayerPrefs.GetInt((i + 1).ToString())); 17 highScoreTexts.Add(Instantiate( 18 Resources.Load<GameObject>("Prefabs/RankText"), 19 transform.position, 20 Quaternion.identity 21 )); 22 highScoreTexts[i].transform.SetParent(transform); 23 highScoreTexts[i].transform.localScale = new Vector3(1, 1, 1); 24 highScoreTexts[i].GetComponent<RectTransform>().anchoredPosition = new Vector3(65, 400 - (145 * (i + 1))); 25 highScoreTexts[i].transform.Find("Text").GetComponent<Text>().text 26 = (i + 1).ToString() + ". " + PlayerPrefs.GetInt((i + 1).ToString()).ToString(); 27 // highScoreTexts[i].transform.Find("Text").GetComponent<Text>().text = "aiueo"; 28 } 29 30 31 32 33 34 } 35 36 void Update() 37 { 38 39 } 40} 41
スコアの表示(スコアシーンのステージ2のスクリプト)
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class HighScoreManager2 : MonoBehaviour 7{ 8 9 List<GameObject> highScoreTexts2 = new List<GameObject>(); 10 11 void Start() 12 { 13 // Debug.Log(PlayerPrefs.GetInt("scoreNumber")); 14 15 for (int i = 0; i < PlayerPrefs.GetInt("scoreNumber2"); i++) 16 { 17 // Debug.Log(PlayerPrefs.GetInt((i + 1).ToString())); 18 highScoreTexts2.Add(Instantiate( 19 Resources.Load<GameObject>("Prefabs/RankText2"), 20 transform.position, 21 Quaternion.identity 22 )); 23 highScoreTexts2[i].transform.SetParent(transform); 24 highScoreTexts2[i].transform.localScale = new Vector3(1, 1, 1); 25 highScoreTexts2[i].GetComponent<RectTransform>().anchoredPosition = new Vector3(65, 400 - (145 * (i + 1))); 26 highScoreTexts2[i].transform.Find("Text2").GetComponent<Text>().text 27 = (i + 1).ToString() + ". " + PlayerPrefs.GetInt((i + 1).ToString()).ToString(); 28 // highScoreTexts[i].transform.Find("Text").GetComponent<Text>().text = "aiueo"; 29 } 30 31 32 33 34 35 } 36 37 void Update() 38 { 39 40 } 41} 42
pfefabのRankTextとRankText2にアタッチ
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using EnhancedUI.EnhancedScroller; 5using UnityEngine.UI; 6 7public class CellView : EnhancedScrollerCellView 8{ 9 public Text m_nameTextUI; 10 11 public void SetData(ScrollerData data) 12 { 13 m_nameTextUI.text = data.m_name; 14 } 15} 16
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using EnhancedUI.EnhancedScroller; 5 6public class ScrollerController : MonoBehaviour, IEnhancedScrollerDelegate 7{ 8 9 public CellView m_cellPrefab; 10 11 12 private ScrollerData[] m_list; 13 14 15 private void Start() 16 { 17 18 19 20 } 21 22 public int GetNumberOfCells(EnhancedScroller scroller) 23 { 24 return m_list.Length; 25 26 } 27 28 29 30 public float GetCellViewSize(EnhancedScroller scroller, int dataIndex) 31 { 32 return 60f; 33 } 34 35 36 public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex) 37 { 38 var cellView = scroller.GetCellView(m_cellPrefab) as CellView; 39 40 cellView.SetData(m_list[dataIndex]); 41 42 return cellView; 43 44 45 } 46 47 48 49} 50
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ScrollerData 6{ 7 public string m_name; 8} 9