Daten in meiner Liste werden nach dem Erstellen meines Spiels null/leerC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Daten in meiner Liste werden nach dem Erstellen meines Spiels null/leer

Post by Anonymous »

Ich begegne ein Problem mit meinem Unity -Spiel, nachdem ich es für das Web erstellt hat. Das Spiel verwendet ein Listen -Array, um Benutzerdetails zu speichern. Wenn Sie jedoch zu einer anderen Szene übergehen, werden die Daten in den Elementen in der Liste null. < /P>
Zusätzlicher Kontext: < /p>
Im Unity -Editor funktioniert alles vollkommen in Ordnung. Vorher, oder hat jemand Einblicke in das, was dies verursacht? /p>
Player Info Manager übernimmt alle Player -Info -Liste. < /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>
Diese Klasse enthält die Unterklassen (mein Ziel war es, jeden Satz von Klasse mit ihren spezifischen Daten zu modularisieren, die ich speichern oder sammeln muss). Die Player -Info speichert alle Daten eines bestimmten Players oder Benutzer. < /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>
Dies ist die Benutzerklasse < /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>
Dies ist die Klasse der Benutzerdetails < /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>
Um das Problem zu debuggen, habe ich ein Textfeld verwendet, um zu überprüfen, ob die Daten in der Liste korrekt abgerufen wurden. Hier ist, was ich beobachtet habe: < /p>
Die Liste selbst existiert nach dem Übergang zu einer anderen Szene immer noch, aber alle ihre Elemente werden plötzlich null. Stattdessen haben die Elemente ihre Werte verloren. ].

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post