Unity Cloud Save教程中GameDataToString多变量返回问题求助
Hey there! Let's break down how to return multiple variables from your GameDataToString() function and clarify how return works in C# since that's where you're stuck.
First, a quick primer on return: A function can only return one single value that matches its declared return type (in your case, string). So you can't just do return var1, var2; directly—you need to package those multiple variables into a single structure first.
Here are the two best approaches for Unity Cloud Save, which is what you're working with:
1. Use a Serializable Class/Struct (Recommended for Cloud Save)
This is the cleanest, most scalable way—we'll create a custom class to hold all your game data, serialize it to a JSON string, and return that. Unity's JsonUtility works perfectly for this, and JSON is ideal for cloud storage since it's human-readable and easy to parse.
First, define a serializable class for your game data:
[Serializable] public class GameData { public int monedas; public int highScore; public float currentHealth; // Add any other variables you need to save here! }
Now update your GameDataToString() function to populate this class and convert it to JSON:
string GameDataToString() { GameData saveData = new GameData(); // Assign your variables to the GameData object saveData.monedas = Mascota._monedas; saveData.highScore = PlayerStats.highScore; // Replace with your actual high score variable saveData.currentHealth = PlayerController.currentHealth; // Replace with your health variable // Convert the entire GameData object to a JSON string return JsonUtility.ToJson(saveData); }
When you need to load this data back from Unity Cloud Save, you can convert the JSON string back to your GameData object:
GameData LoadSavedData(string savedJson) { return JsonUtility.FromJson<GameData>(savedJson); }
2. String Concatenation (Quick & Dirty for Simple Cases)
If you want a simpler approach without creating a class, you can concatenate all your variables into a single string using a delimiter (like | or ,). Just be careful—this is error-prone if your variables ever contain the delimiter character, and it's harder to maintain as you add more data.
Example:
string GameDataToString() { // Use a unique delimiter to separate values return $"{Mascota._monedas}|{PlayerStats.highScore}|{PlayerController.currentHealth}"; }
To read this back, you'd split the string and convert each part back to its original type:
void LoadFromSavedString(string savedString) { string[] dataParts = savedString.Split('|'); Mascota._monedas = int.Parse(dataParts[0]); PlayerStats.highScore = int.Parse(dataParts[1]); PlayerController.currentHealth = float.Parse(dataParts[2]); }
To recap why your original code only returns one value: The return statement sends back exactly one value matching the function's return type. By packaging multiple variables into a JSON string (via a class) or a concatenated string, you're turning multiple values into a single string that the function can return.
Hope that clears things up and gets you back on track with Unity Cloud Save!
内容的提问来源于stack exchange,提问作者JoseD TC

