阻止Unity Editor Inspector复选框在游戏中进行任何操作

时间:2019-02-10 16:17:43

标签: c# unity3d checkbox

总而言之,我可以: 我有一些将布尔值设置为true的代码。启用此小复选框后,它会按预期运行,从而使游戏正常运行。 When set to true it does as expected

但是,稍后在代码上的某个时候将此布尔值设置为false(请记住,它是一个 public 布尔值)。不幸的是,启用此复选框时。控制台显示“ true,false,true,false”等,以防止出现预期的结果。 You can see that the output is true, false, true, false when the checkbox is enabled

如果禁用此复选框,则输出将显示“ false,true,false,true”等,这将阻止任何操作。 Nothing works!!!

有没有办法禁止这个愚蠢的复选框在游戏中起作用?我尝试了[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;
    }

}

(请注意,其中一些是用于调试的,因此仅用于测试它就不合适了!)

谢谢!我希望这足够清楚。

2 个答案:

答案 0 :(得分:1)

我测试了提供的代码,并且按预期运行-UI中的复选框与正在运行的代码中bool的状态保持同步。控制台日志也始终显示正确的值。

通过添加脚本的第二个实例,我能够复制您描述的行为。尝试将您的print呼叫更改为print($"{start} {GetHashCode()}");。您应该在控制台中仅看到GetHashCode()的一个值。如果看到两个值,则肯定有两个脚本实例。

答案 1 :(得分:0)

我修复了!我从附加了游戏对象的脚本中删除了该脚本,然后将布尔值设置为静态,然后从那里引用了它。

仍然感谢您的帮助!