我有四个具有相同脚本的游戏对象和相同的bool,当其中一个被Ray击中Bool状态时,函数不会启动,因为其他三个游戏对象设置为false。
我尝试的是:
- 该代码可以很好地工作,最后对象进行了实例化
- 如果我禁用第一个对象上的脚本并再次启用了该函数,则该函数仅在此对象上正常工作
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(,我相信您的代码应该起作用,但是我没有设法使它起作用,也许是因为我仍然是对编程的新手。