c#值切换值,不需要我碰它

本文关键字:不需要 | 更新日期: 2023-09-27 17:50:46

我在Unity中使用c#开发一款游戏。代码的一部分使用布尔值来决定玩家是否可以购买建筑的升级。如果是,则建筑物的整数增加1。接下来,布尔值被设为false。如果他不在,那么此刻什么也不会发生。

游戏中有一个按钮,功能上将周数增加1,允许玩家再次能够升级建筑(从而将布尔值再次设置为true)。

问题是,在购买升级后,布尔值被设置为false,甚至当我再次将其设置为true时,当我尝试升级建筑物时,布尔值似乎为false。我还试图用整数代替布尔值(使用值0和1)来检查它,但问题仍然存在。

下面是一些代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ActivateTrigger : MonoBehaviour
{
    public int transtech = 0;
    public int factech = 0;
    public bool facmag = true;
    public bool transmag = true;
    void OnGUI () {GUI.Box(new Rect(0, Screen.height - 120 - 60, 150, 30), "Week: " + week.ToString());
    if (GUI.Button(new Rect(0, Screen.height - 120 - 30, 150, 20), "Continue one week"))
    {       
        NextProcess();
    }
    if (GUI.Button(new Rect(20, 70, 120, 20), "Koop upgrade") )
    {
            Debug.Log("Facmag: " + facmag);
        if (facmag == true)
            {
        facmag = false;
            }
    }
    void NextProcess()
    {
        Debug.Log("Next process called");
        facmag = true;
        transmag = true;
        Debug.Log("Facmag: " + facmag);
    }
}

因此,当调用NextProcess()时,调试日志显示该值为true。但在第一次购买升级后,无论我是否按下按钮执行NextProcess(),值都保持为false。我想知道我是否完全错过了什么。这个类中的其他代码没有使用布尔值,我要用到的其他几个类也没有。那么问题在哪里呢?

c#值切换值,不需要我碰它

(简答)

如果你的脚本附加到一个以上的对象,只有最上面的按钮在OnGUI()正在修改facmag或调用NextProcess()。

[稍微扩展一下上面的注释]

Unity在对象之间共享脚本的执行顺序是不可控制的。(您可以在单个对象中修改脚本order 。)这意味着OnGUI()将以随机顺序为它所附加的N个对象调用N次。只有位于特定鼠标位置的"最顶端"GUI元素才会接受鼠标输入。

的例子:

using UnityEngine;
using System.Collections;
public class OverlapButton : MonoBehaviour {
    public string id_;
    void OnGUI(){
            if(GUI.Button(new Rect(0,0,50,50),"Touch")){
                    Debug.Log("I'm object " + id_);
            }
    }
}

如果你将此脚本附加到50个对象,Unity将绘制50个按钮,但只有一个按钮将响应鼠标点击,你不能控制哪一个。