Unity (C#):如何从不同的场景调用 List<int>?
Unity (C#): How do I call a List<int> from a different Scene?
Unity (C#):如何从不同场景调用列表?我在当前场景中得到 nullReferenceException bc,它没有设置变量。但在之前的场景中,它具有我想要的正确值和变量。 (注意:这两个场景不同,但我想将分数用作场景之间的共享值)。
否则,您是否有其他方法来检索 "frameTexts[9].text" 位置?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreDisplay : MonoBehaviour
{
public Text[] rollTexts, frameTexts;
static string output;
public void FillRolls(List<int> rolls)
{
string scoreString = FormatRolls(rolls);
for (int i = 0; i < scoreString.Length; i++)
{
rollTexts[i].text = scoreString[i].ToString();
}
}
public void Fillframes(List<int> frames)
{
for (int i = 0; i < frames.Count; i++)
{
frameTexts[i].text = frames[i].ToString();
Debug.Log(frameTexts[i].text + " frames");
}
}
public static string FormatRolls(List<int> rolls)
{
// ScoreDisplay scoreDisplay = new ScoreDisplay();
output = "";
for (int i = 0; i < rolls.Count; i++)
{
int box = output.Length + 1; // Score box 1 to 21
if (rolls[i] == 0)
{ // Always enter 0 as -
output += "-";
}
else if ((box % 2 == 0 || box == 21) && rolls[i - 1] + rolls[i] == 10)
{ // SPARE anywhere
output += "/";
}
else if (box >= 19 && rolls[i] == 10)
{ // STRIKE in frame 10
output += "X";
}
else if (rolls[i] == 10)
{ // STRIKE in frame 1-9
output += "X ";
}
else
{
output += rolls[i].ToString(); // Normal 1-9 bowl
}
}
return output;
}
public string DisplayFinalScore()
{
string FinalScore = "Congrats on scoring: " + frameTexts[9].text;
return FinalScore;
}
}
在脚本中使用 DontDestroyOnLoad 对象,该对象包含您要从一个场景保留到另一个场景的变量。
您可以使用 DontDestroyOnLoad(transform.gameObject);
使游戏对象在您的下一个场景中处于活动状态,或者使用 PlayerPrefs
来保存数据并在下一个场景中加载。两者都可以!
我认为你的要求取决于你想在你的项目中做什么。
但我可以推荐一些解决方案:
如果你想保持整个游戏的分数,我认为单例会很好!!
Unity (C#):如何从不同场景调用列表?我在当前场景中得到 nullReferenceException bc,它没有设置变量。但在之前的场景中,它具有我想要的正确值和变量。 (注意:这两个场景不同,但我想将分数用作场景之间的共享值)。
否则,您是否有其他方法来检索 "frameTexts[9].text" 位置?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ScoreDisplay : MonoBehaviour
{
public Text[] rollTexts, frameTexts;
static string output;
public void FillRolls(List<int> rolls)
{
string scoreString = FormatRolls(rolls);
for (int i = 0; i < scoreString.Length; i++)
{
rollTexts[i].text = scoreString[i].ToString();
}
}
public void Fillframes(List<int> frames)
{
for (int i = 0; i < frames.Count; i++)
{
frameTexts[i].text = frames[i].ToString();
Debug.Log(frameTexts[i].text + " frames");
}
}
public static string FormatRolls(List<int> rolls)
{
// ScoreDisplay scoreDisplay = new ScoreDisplay();
output = "";
for (int i = 0; i < rolls.Count; i++)
{
int box = output.Length + 1; // Score box 1 to 21
if (rolls[i] == 0)
{ // Always enter 0 as -
output += "-";
}
else if ((box % 2 == 0 || box == 21) && rolls[i - 1] + rolls[i] == 10)
{ // SPARE anywhere
output += "/";
}
else if (box >= 19 && rolls[i] == 10)
{ // STRIKE in frame 10
output += "X";
}
else if (rolls[i] == 10)
{ // STRIKE in frame 1-9
output += "X ";
}
else
{
output += rolls[i].ToString(); // Normal 1-9 bowl
}
}
return output;
}
public string DisplayFinalScore()
{
string FinalScore = "Congrats on scoring: " + frameTexts[9].text;
return FinalScore;
}
}
在脚本中使用 DontDestroyOnLoad 对象,该对象包含您要从一个场景保留到另一个场景的变量。
您可以使用 DontDestroyOnLoad(transform.gameObject);
使游戏对象在您的下一个场景中处于活动状态,或者使用 PlayerPrefs
来保存数据并在下一个场景中加载。两者都可以!
我认为你的要求取决于你想在你的项目中做什么。 但我可以推荐一些解决方案:
如果你想保持整个游戏的分数,我认为单例会很好!!