Я сталкиваюсь с проблемой с моей игрой Unity после создания ее для Интернета. В игре используется массив списков для хранения данных пользователя, но при переходе на другую сцену данные в элементах в списке становятся нулевыми. < /P>
Дополнительный контекст: < /p>
В редакторе Unity все работает совершенно нормально.
Однако, после создания и публикации игры для Интернета, список больше не сохраняет свои значения при переключении сцен. Раньше, или у кого -то есть представление о том, что может вызвать это? /p>
Информационный менеджер игрока обрабатывает все информацию об информации игрока. < /p>
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
///
/// Manages all player info data
///
public class PlayerInfoManager : MonoBehaviour
{
public static PlayerInfoManager Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
[SerializeField] List
playerInfos = new List();
int selectedPlayerInfoIndex;
public PlayerInfo GetMyPlayerInfo() { return playerInfos[0]; }
public List GetAllPlayerInfos() { return playerInfos; }
public void AddPlayerInfo(string username, PlayerTurn playerTurn)
{
AddPlayerInfo(new PlayerInfo(username, playerTurn));
}
public void AddPlayerInfo(User user, PlayerTurn playerTurn)
{
AddPlayerInfo(new PlayerInfo(user, playerTurn));
}
public void AddPlayerInfo(PlayerInfo playerInfo)
{
playerInfos.Add(playerInfo);
}
public void ResetAllPlayerInfo()
{
ClearPlayerInfoData();
}
public void ResetPlayerInfoData()
{
foreach (var playerInfo in playerInfos)
{
playerInfo?.GetPlayerTiles()?.ForEach(tile => Destroy(tile?.gameObject));
playerInfo?.RemovePlayerTiles();
playerInfo?.SetScore(0);
}
GameDataManager.Instance?.ClearGameData();
}
public void ClearPlayerInfoData()
{
ResetPlayerInfoData();
// Restore the Main Player Info
if (playerInfos.Count > 1) { playerInfos = new List { playerInfos[0] }; }
}
}
< /code>
Это класс, содержащий подклассы (моя цель состояла в том, чтобы модулировать каждый набор класса с их конкретными данными, которые мне нужны для хранения или сбора). Информация об игроке хранит все данные конкретного игрока или пользователя. < /P>
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class PlayerInfo
{
// User Info
[SerializeField] User user = new User();
[SerializeField] GameData gameData = new GameData();
// Game Data
[SerializeField] PlayerTurn playerTurn; // On Game Start it should choose either Player 1/2 (Online Games Mostly)
[SerializeField] List playerTiles = new List(); // Generated Tiles
[SerializeField] int score = 0;
public PlayerInfo() { }
public PlayerInfo(string username, PlayerTurn playerTurn)
{
user = new User();
user.GetUserDetails().UserName = username;
this.playerTurn = playerTurn;
this.gameData = new GameData();
}
public PlayerInfo(User user, PlayerTurn playerTurn)
{
this.user = user;
this.playerTurn = playerTurn;
this.gameData = new GameData();
}
public User GetUser() { return user; }
public GameData GetGameData() { return gameData; }
public List GetPlayerTiles() { return playerTiles; }
public PlayerTurn GetPlayerTurn() { return playerTurn; }
public void SetPlayerTurn(PlayerTurn playerTurn) { this.playerTurn = playerTurn; }
public int GetScore() { return score; }
public void SetScore(int score) { this.score = score; }
}
< /code>
Это пользовательский класс < /p>
using Newtonsoft.Json;
using System;
using UnityEngine;
[Serializable]
public class User
{
[JsonProperty]
[SerializeField] private UserDetails userDetails = new UserDetails();
[JsonProperty]
[SerializeField] private UserCategoryRole userCategoryRole = new UserCategoryRole();
// Set the User details and category role from another User object
public void SetUser(User user)
{
userDetails = user.userDetails;
userCategoryRole = user.userCategoryRole;
}
// Setters and Getters for UserDetails
public UserDetails GetUserDetails()
{
return userDetails;
}
public void SetUserDetails(UserDetails userDetails)
{
this.userDetails = userDetails;
}
// Setters and Getters for UserCategoryRole
public UserCategoryRole GetUserCategoryRole()
{
return userCategoryRole;
}
public void SetUserCategoryRole(UserCategoryRole userCategoryRole)
{
this.userCategoryRole = userCategoryRole;
}
}
< /code>
Это класс данных пользователя < /p>
using Newtonsoft.Json;
using System;
using UnityEngine;
///
/// User Details like personal details etc
///
[Serializable]
public class UserDetails
{
[Header("Personal Details")]
[SerializeField] private string userName;
[SerializeField] private string fullName;
[SerializeField] private string email;
[SerializeField] private string phoneNumber;
[JsonIgnore] private string password;
[SerializeField] bool hasEmail = false;
[Header("Location")]
[SerializeField] private string country;
[SerializeField] private string city;
[Header("Age & GenderType")]
[SerializeField] private GenderType gender;
[SerializeField] private int age; // TODO: Remove this (We can still calculate the age using the date of birth)
[SerializeField] private string dateOfBirth;
[Header("Avatar")]
[SerializeField] int avatarPosition;
[Header("Parental/Guardian Consent")]
[SerializeField] [JsonProperty] private ParentalConsent parentalConsent;
public UserDetails() { }
public UserDetails(string userName){ this.userName = userName; }
public UserDetails(string fullName, int avatarPosition)
{
this.fullName = fullName;
this.avatarPosition = avatarPosition;
}
public string UserName { get => userName; set => userName = value; }
public string PhoneNumber { get => phoneNumber; set => phoneNumber = value; }
public string FullName { get => fullName; set => fullName = value; }
public string Email { get => email; set => email = value; }
public string Password { get => password; set => password = value; }
public void ClearSensitiveData()
{
password = "";
}
}
< /code>
Чтобы отладить проблему, я использовал текстовое поле, чтобы проверить, правильно ли извлечены данные в списке. Вот что я наблюдал: < /p>
Сам список все еще существует после перехода на другую сцену, но все его элементы внезапно становятся нулевыми. но вместо этого элементы потеряли свои значения.
Дополнительные шаги, предпринятые: < /p>
гарантировали, что массив списков сериализован. ].
Подробнее здесь: https://stackoverflow.com/questions/794 ... ng-my-game
Мой массив списков становится нулевым после создания моей игры ⇐ C#
Место общения программистов C#
-
Anonymous
1738310123
Anonymous
Я сталкиваюсь с проблемой с моей игрой Unity после создания ее для Интернета. В игре используется массив списков для хранения данных пользователя, но при переходе на другую сцену данные в элементах в списке становятся нулевыми. < /P>
Дополнительный контекст: < /p>
В редакторе Unity все работает совершенно нормально.
Однако, после создания и публикации игры для Интернета, список больше не сохраняет свои значения при переключении сцен. Раньше, или у кого -то есть представление о том, что может вызвать это? /p>
Информационный менеджер игрока обрабатывает все информацию об информации игрока. < /p>
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
///
/// Manages all player info data
///
public class PlayerInfoManager : MonoBehaviour
{
public static PlayerInfoManager Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
[SerializeField] List
playerInfos = new List();
int selectedPlayerInfoIndex;
public PlayerInfo GetMyPlayerInfo() { return playerInfos[0]; }
public List GetAllPlayerInfos() { return playerInfos; }
public void AddPlayerInfo(string username, PlayerTurn playerTurn)
{
AddPlayerInfo(new PlayerInfo(username, playerTurn));
}
public void AddPlayerInfo(User user, PlayerTurn playerTurn)
{
AddPlayerInfo(new PlayerInfo(user, playerTurn));
}
public void AddPlayerInfo(PlayerInfo playerInfo)
{
playerInfos.Add(playerInfo);
}
public void ResetAllPlayerInfo()
{
ClearPlayerInfoData();
}
public void ResetPlayerInfoData()
{
foreach (var playerInfo in playerInfos)
{
playerInfo?.GetPlayerTiles()?.ForEach(tile => Destroy(tile?.gameObject));
playerInfo?.RemovePlayerTiles();
playerInfo?.SetScore(0);
}
GameDataManager.Instance?.ClearGameData();
}
public void ClearPlayerInfoData()
{
ResetPlayerInfoData();
// Restore the Main Player Info
if (playerInfos.Count > 1) { playerInfos = new List { playerInfos[0] }; }
}
}
< /code>
Это класс, содержащий подклассы (моя цель состояла в том, чтобы модулировать каждый набор класса с их конкретными данными, которые мне нужны для хранения или сбора). Информация об игроке хранит все данные конкретного игрока или пользователя. < /P>
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class PlayerInfo
{
// User Info
[SerializeField] User user = new User();
[SerializeField] GameData gameData = new GameData();
// Game Data
[SerializeField] PlayerTurn playerTurn; // On Game Start it should choose either Player 1/2 (Online Games Mostly)
[SerializeField] List playerTiles = new List(); // Generated Tiles
[SerializeField] int score = 0;
public PlayerInfo() { }
public PlayerInfo(string username, PlayerTurn playerTurn)
{
user = new User();
user.GetUserDetails().UserName = username;
this.playerTurn = playerTurn;
this.gameData = new GameData();
}
public PlayerInfo(User user, PlayerTurn playerTurn)
{
this.user = user;
this.playerTurn = playerTurn;
this.gameData = new GameData();
}
public User GetUser() { return user; }
public GameData GetGameData() { return gameData; }
public List GetPlayerTiles() { return playerTiles; }
public PlayerTurn GetPlayerTurn() { return playerTurn; }
public void SetPlayerTurn(PlayerTurn playerTurn) { this.playerTurn = playerTurn; }
public int GetScore() { return score; }
public void SetScore(int score) { this.score = score; }
}
< /code>
Это пользовательский класс < /p>
using Newtonsoft.Json;
using System;
using UnityEngine;
[Serializable]
public class User
{
[JsonProperty]
[SerializeField] private UserDetails userDetails = new UserDetails();
[JsonProperty]
[SerializeField] private UserCategoryRole userCategoryRole = new UserCategoryRole();
// Set the User details and category role from another User object
public void SetUser(User user)
{
userDetails = user.userDetails;
userCategoryRole = user.userCategoryRole;
}
// Setters and Getters for UserDetails
public UserDetails GetUserDetails()
{
return userDetails;
}
public void SetUserDetails(UserDetails userDetails)
{
this.userDetails = userDetails;
}
// Setters and Getters for UserCategoryRole
public UserCategoryRole GetUserCategoryRole()
{
return userCategoryRole;
}
public void SetUserCategoryRole(UserCategoryRole userCategoryRole)
{
this.userCategoryRole = userCategoryRole;
}
}
< /code>
Это класс данных пользователя < /p>
using Newtonsoft.Json;
using System;
using UnityEngine;
///
/// User Details like personal details etc
///
[Serializable]
public class UserDetails
{
[Header("Personal Details")]
[SerializeField] private string userName;
[SerializeField] private string fullName;
[SerializeField] private string email;
[SerializeField] private string phoneNumber;
[JsonIgnore] private string password;
[SerializeField] bool hasEmail = false;
[Header("Location")]
[SerializeField] private string country;
[SerializeField] private string city;
[Header("Age & GenderType")]
[SerializeField] private GenderType gender;
[SerializeField] private int age; // TODO: Remove this (We can still calculate the age using the date of birth)
[SerializeField] private string dateOfBirth;
[Header("Avatar")]
[SerializeField] int avatarPosition;
[Header("Parental/Guardian Consent")]
[SerializeField] [JsonProperty] private ParentalConsent parentalConsent;
public UserDetails() { }
public UserDetails(string userName){ this.userName = userName; }
public UserDetails(string fullName, int avatarPosition)
{
this.fullName = fullName;
this.avatarPosition = avatarPosition;
}
public string UserName { get => userName; set => userName = value; }
public string PhoneNumber { get => phoneNumber; set => phoneNumber = value; }
public string FullName { get => fullName; set => fullName = value; }
public string Email { get => email; set => email = value; }
public string Password { get => password; set => password = value; }
public void ClearSensitiveData()
{
password = "";
}
}
< /code>
Чтобы отладить проблему, я использовал текстовое поле, чтобы проверить, правильно ли извлечены данные в списке. Вот что я наблюдал: < /p>
Сам список все еще существует после перехода на другую сцену, но все его элементы внезапно становятся нулевыми. но вместо этого элементы потеряли свои значения.
Дополнительные шаги, предпринятые: < /p>
гарантировали, что массив списков сериализован. ].
Подробнее здесь: [url]https://stackoverflow.com/questions/79400782/my-list-array-becomes-null-after-building-my-game[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия