在Unity 2d中使用同一布尔值与多个对象



我有四个具有相同脚本的游戏对象和相同的bool,当其中一个被Ray击中Bool状态时,函数不会启动,因为其他三个游戏对象设置为false。

我尝试的是:

  1. 该代码可以很好地工作,最后对象进行了实例化
  2. 如果我禁用第一个对象上的脚本并再次启用了该函数,则该函数仅在此对象上正常工作
public bool selected;
void Start(){
    selected = false;
}
void Update(){
    showRange ();
}

public void showRange(){
    if (selected == true) {
        for (int i = 0; i < tileRange.Count; i++) {
            tileRange [i].GetComponent<SpriteRenderer> ().enabled = true;
        } 
    } else {
            for (int i = 0; i < tileRange.Count; i++) {
                tileRange [i].GetComponent<SpriteRenderer> ().enabled = false;
        }
    }
}

只需使用静态变量:c#中静态变量的用途是什么?什么时候使用?为什么我不能在方法内声明静态变量?

您将有:

选择了公共静态布尔;

尝试使用gameManager。

public static gamemanager Instance;
public bool selected;
private void Awake()
{
    Instance = this;
}

您的GameManager可以具有"选定"的公共布尔变量。

新开始方法:

void Start() {
gamemanager.Instance.selected = false;
}

新的showrange函数

public void showRange(){
if (gamemanager.Instance.selected) {
    for (int i = 0; i < tileRange.Count; i++) {
        tileRange [i].GetComponent<SpriteRenderer> ().enabled = true;
    } 
} else {
        for (int i = 0; i < tileRange.Count; i++) {
            tileRange [i].GetComponent<SpriteRenderer> ().enabled = false;
    }
}
}

我确定可以改进此代码。让我知道它是否有帮助。

问题不在选定的bool中,但它在showrange((方法中。如果射线击中一个对象,将选择它,而其他三个对象将保持未选择((那是因为我使用的是存储最后一个hitted对象的列表,那么代码仅适用于此列表中的对象((

(

showrange((将无法与所选对象一起使用,因为该方法需要选择所有四个对象,然后它起作用(愚蠢的方法,我因此无法入睡(。

我设法修复了showrange((问题,使用一个新脚本,该脚本关闭所有游戏对象脚本组件并打开所选的一个脚本,这将使ShowRange((方法无法检查其他三个对象的Bool状态。

for(Guilherme,Misher和Josep(谢谢您的帮助,我非常感谢,但是如上所述,问题不在布尔值中。

对于(Muhammad Farhan Aqeel(,我相信您的代码应该起作用,但是我没有设法使它起作用,也许是因为我仍然是对编程的新手。

相关内容

  • 没有找到相关文章

最新更新