总而言之,我可以: 我有一些将布尔值设置为true的代码。启用此小复选框后,它会按预期运行,从而使游戏正常运行。
但是,稍后在代码上的某个时候将此布尔值设置为false(请记住,它是一个 public 布尔值)。不幸的是,启用此复选框时。控制台显示“ true,false,true,false”等,以防止出现预期的结果。
如果禁用此复选框,则输出将显示“ false,true,false,true”等,这将阻止任何操作。
有没有办法禁止这个愚蠢的复选框在游戏中起作用?我尝试了[system.nonserialized]无效。 至少,有没有办法在代码中禁用和启用此复选框?
根据要求,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class startAgain : MonoBehaviour {
public bool start;
// Use this for initialization
void Start () {
//start = true;
}
public void use ()
{
start = true;
}
// Update is called once per frame
void Update () {
print(start);
}
public void rest()
{
StartCoroutine(Waittostart());
Vector3 ball = GameObject.Find("Ball").transform.localPosition = new Vector3(0,0,0);
Transform lpadlx = GameObject.Find("Player Paddle").transform;
Vector3 lpadpos = lpadlx.position;
Vector3 leftpaddle = GameObject.Find("Player Paddle").transform.position = new Vector3(lpadpos.x, 0, 0);
Transform rpadlx = GameObject.Find("AI Paddle").transform;
Vector3 rpadpos = rpadlx.position;
Vector3 rightpaddle = GameObject.Find("AI Paddle").transform.position = new Vector3(rpadpos.x, 0, 0);
}
IEnumerator Waittostart()
{
print("RUNNING!");
start = false;
yield return new WaitForSeconds(2);
start = true;
}
}
(请注意,其中一些是用于调试的,因此仅用于测试它就不合适了!)
谢谢!我希望这足够清楚。
答案 0 :(得分:1)
我测试了提供的代码,并且按预期运行-UI中的复选框与正在运行的代码中bool
的状态保持同步。控制台日志也始终显示正确的值。
通过添加脚本的第二个实例,我能够复制您描述的行为。尝试将您的print
呼叫更改为print($"{start} {GetHashCode()}");
。您应该在控制台中仅看到GetHashCode()
的一个值。如果看到两个值,则肯定有两个脚本实例。
答案 1 :(得分:0)
我修复了!我从附加了游戏对象的脚本中删除了该脚本,然后将布尔值设置为静态,然后从那里引用了它。
仍然感谢您的帮助!