我有一个统一开发的游戏,这是一个按钮的代码。它应该使用脚本“ BoardScript”的公共列表,并在此列表中添加一个数字,但是由于某种原因,它不起作用。 我已经检查了Button单击是否起作用(如您所见,在代码中显示了debug.log yes),但是单击它并未将数字添加到我的列表中。 在“ BoardScript”中,我尝试添加一些数字,并将该值成功添加到列表中,因此,我猜该脚本中的某个地方有错误,但是我无法弄清楚什么是错误的。 你能帮我吗?
private Button B;
void Start()
{
B = GetComponent<Button>();
B.onClick.AddListener(Clicker);
}
void Clicker()
{
BoardScript boardScript = new BoardScript();
int Two = 2;
boardScript.UserList.Add(Two);
Debug.Log("Added);
}
// Update is called once
编辑
我差点忘了讲一个细节。我写了Debug.Log(UserList.Count),即使我按按钮脚本的建议加了几次(它是相同的脚本,但对象也不同),但该值还是1。
因此,正如史蒂夫所说,这是BoardScript代码,它有点长。
private int[] PreList = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private List<int> ButtonList = new List<int>();
public List<int> UserList = new List<int>();
private System.Random Rnd = new System.Random();
public List<int> EndList = new List<int>();
void Randomizer()
{
PreList = PreList.OrderBy(C => Rnd.Next()).ToArray();
foreach (var item in PreList)
{
Debug.Log(item.ToString());
if (item == 1)
{
OneMethod();
}
if (item == 2)
{
TwoMethod();
}
if (item == 3)
{
ThreeMethod();
}
if (item == 4)
{
FourMethod();
}
if (item == 5)
{
FiveMethod();
}
if (item == 6)
{
SixMethod();
}
if (item == 7)
{
SevenMethod();
}
if (item == 8)
{
EightMethod();
}
if (item == 9)
{
NineMethod();
}
}
EndList = PreList.ToList();
}
void OneMethod()
{
//yield return new WaitForSeconds(1);
ButtonList.Add(1);
}
void TwoMethod()
{
ButtonList.Add(2);
}
void ThreeMethod()
{
ButtonList.Add(3);
}
void FourMethod()
{
ButtonList.Add(4);
}
void FiveMethod()
{
ButtonList.Add(5);
}
void SixMethod()
{
ButtonList.Add(6);
}
void SevenMethod()
{
ButtonList.Add(7);
}
void EightMethod()
{
ButtonList.Add(8);
}
void NineMethod()
{
ButtonList.Add(9);
}
void Start ()
{
Randomizer();
string[] the_array = ButtonList.Select(i => i.ToString()).ToArray();
string OrderString = string.Join(", ", the_array);
GameObject.Find("Order").GetComponent<Text>().text = OrderString;
UserList.Add(1);
UserList.Add(5);
}
IEnumerator Waiter()
{
yield return new WaitForSeconds(10);
}
// Update is called once per frame
void Update()
{
string[] the_array = UserList.Select(i => i.ToString()).ToArray();
string OrderString = string.Join(", ", the_array);
Debug.Log(OrderString);
if (UserList.Count == 8)
{
if (UserList == ButtonList)
{
//Sound
BehaviourModel B = new BehaviourModel();
B.Counter++;
if (B.Counter < 10)
{
SceneManager.LoadScene(B.SceneArray[B.Counter]);
}
else if (B.Counter > 10)
{
SceneManager.LoadScene("MainMenuScene");
}
}
else if (UserList != ButtonList)
{
UserList.Clear();
Debug.Log("Fail");
}
}
}
答案 0 :(得分:4)
每次单击按钮都会创建一个BoardScript
的新实例。您应该将boardScript
变量作为变量存储在类或单独的组件中,以确保数据能够持久保存。
答案 1 :(得分:2)
您只能创建一个实例,例如:
private Button B;
BoardScript boardScript = new BoardScript();
然后在您的void Clicker()
方法中:
将项目添加到UserList。
或: 您可以在BoardScript类中创建一个静态变量,然后检查是否为空。如果它为null,则创建一个新实例,否则返回一个旧实例。
以下代码会有所帮助:
private static BoardScript _uniqueBoardScript;
private BoardScript()
{}
public static BoardScript GetInstance()
{
if(_uniqueBoardScript==null)
{
_uniqueBoardScript = new BoardScript();
}
return _uniqueBoardScript;
}
以及您的void Clicker()
{
BoardScript boardScript = BoardScript.GetInstance();
int Two = 2;
boardScript.UserList.Add(Two);
Debug.Log("Added);
}