Ошибка при записи данных в List
Реализовал таблицу рекордов, реализовал запись в неё. При тестировании в Unity проблем нет, при создании билда и запуске на android или PC запись рекорда в таблицу не происходит, ни принудительно через код, ни после смерти персонажа и вызова функции. Пробовал преобразование типов, но ничего не изменилось. Выдаётся ошибка с PID 29116 и [0x00023] in <391300e255ec4a5db95b581d02f33539>:0 ошибкой какого-либо номера.
public void SendRecord() {
int score = Convert.ToInt32(Collect.score);
string text = Convert.ToString(inputField2.text);
Debug.Log(Equals(score) + "" + score);
// highScoreTable.AddHightScoreEntry(564654, text);
// highScoreTable.AddHightScoreEntry(564654, "test");
// highScoreTable.AddHightScoreEntry(score, "test");
highScoreTable.AddHightScoreEntry(score, text); // вызываем функцию для создания элемента List
}
// скрипт collect.score
public static int score;
public Text TextScore;
void Start() {
TextScore = GetComponent<Text>();
}
void Update() {
TextScore.text = "Счёт: " + score;
}
// скрипт highScoreTable
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class highScoreTable : MonoBehaviour {
private Transform entryContainer;
private Transform entryTemplate;
private List<HightScoreEntry> hightScoreEntryList;
private List<Transform> hightScoreEntryTransformList;
public void Awake() {
entryContainer = transform.Find("highScoreEntryContainer");
entryTemplate = entryContainer.Find("highScoreEntryTemplate");
entryTemplate.gameObject.SetActive(false);
string jsonString = PlayerPrefs.GetString("hightScoreTable");
HightScore hightscore = JsonUtility.FromJson<HightScore>(jsonString);
if(hightscore.hightScoreEntryList.Count == 0) {
//проверочное условие, которое при отсутствии элементов записывает в массив хоть какой-нибудь элемент
hightScoreEntryList = new List<HightScoreEntry>() {new HightScoreEntry{ score = 35435, name = "asdasd"}, };
hightScoreEntryTransformList = new List<Transform>();
foreach (HightScoreEntry hightScoreEntry in hightScoreEntryList) {
createHightScoreEntryTransform(hightScoreEntry, entryContainer, hightScoreEntryTransformList);
}
string json = JsonUtility.ToJson(hightScoreEntryList);
PlayerPrefs.SetString("hightScoreTable", json);
PlayerPrefs.Save();
Debug.Log(PlayerPrefs.GetString("hightScoreTable"));
}
for(int i = 0; i < hightscore.hightScoreEntryList.Count; i++) { // сортируем массив
for(int j = i + 1; j < hightscore.hightScoreEntryList.Count; j++) {
if(hightscore.hightScoreEntryList[j].score > hightscore.hightScoreEntryList[i].score) {
HightScoreEntry tmp = hightscore.hightScoreEntryList[i];
hightscore.hightScoreEntryList[i] = hightscore.hightScoreEntryList[j];
hightscore.hightScoreEntryList[j] = tmp;
string json = JsonUtility.ToJson(hightscore); // перезаписываем отсортированный массив
PlayerPrefs.SetString("hightScoreTable", json);
PlayerPrefs.Save();
}
}
}
int n=10;
int k = hightscore.hightScoreEntryList.Count;
for (int i = 0; i < (hightscore.hightScoreEntryList.Count - n); i ++ ) { // цикл для удаления лишних элементов и сохранения результата
if(hightscore.hightScoreEntryList.Count > n) {
hightscore.hightScoreEntryList.RemoveAt(k-1);
string json = JsonUtility.ToJson(hightscore);
PlayerPrefs.SetString("hightScoreTable", json);
PlayerPrefs.Save();
Debug.Log(hightscore.hightScoreEntryList.Count);
Debug.Log(PlayerPrefs.GetString("hightScoreTable"));
}
}
Debug.Log(PlayerPrefs.GetString("hightScoreTable"));
hightScoreEntryTransformList = new List<Transform>();
foreach (HightScoreEntry hightScoreEntry in hightscore.hightScoreEntryList) { // цикл для создания UI элементов
createHightScoreEntryTransform(hightScoreEntry, entryContainer, hightScoreEntryTransformList);
}
}
// метод для создания элементов в таблице рекордов
public void createHightScoreEntryTransform(HightScoreEntry hightScoreEntry, Transform container, List<Transform> transformList) {
float templateHight = 45f;
Transform entryTransform = Instantiate(entryTemplate, container);
RectTransform entryRectTransform = entryTransform.GetComponent<RectTransform>();
entryRectTransform.anchoredPosition = new Vector2(0, -templateHight * transformList.Count);
entryTransform.gameObject.SetActive(true);
int rank = transformList.Count +1;
string rankString;
switch(rank) {
default:
rankString = rank + ""; break;
case 1:
rankString = rank + "ый"; break;
case 2:
rankString = rank + "ой"; break;
case 3:
rankString = rank + "ий"; break;
}
entryTransform.Find("position (1)").GetComponent<Text>().text = rankString;
int score = hightScoreEntry.score;
entryTransform.Find("score (1)").GetComponent<Text>().text = score.ToString();
string name = hightScoreEntry.name;
entryTransform.Find("name (1)").GetComponent<Text>().text = name;
transformList.Add(entryTransform);
}
// метод для добавления новых результатов в таблицу
public static void AddHightScoreEntry(int score, string name) {
HightScoreEntry hightScoreEntry = new HightScoreEntry { score = score, name = name};
string jsonString = PlayerPrefs.GetString("hightScoreTable");
HightScore hightscore = JsonUtility.FromJson<HightScore>(jsonString);
hightscore.hightScoreEntryList.Add(hightScoreEntry);
string json = JsonUtility.ToJson(hightscore);
PlayerPrefs.SetString("hightScoreTable", json);
PlayerPrefs.Save();
}
public class HightScore {
public List<HightScoreEntry> hightScoreEntryList;
}
[System.Serializable]
public class HightScoreEntry {
public int score;
public string name;
}
}
