具有相同脚本和相同布尔值的四个游戏对象,当其中一个被射线击中时,布尔状态为true,但由于其他三个游戏对象设置为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;
}
}
}
答案 0 :(得分:1)
您将拥有:
选择了公共静态布尔;
答案 1 :(得分:0)
public static gamemanager Instance;
public bool selected;
private void Awake()
{
Instance = this;
}
您的游戏管理员可以将公共布尔变量“选中”。
void Start() {
gamemanager.Instance.selected = false;
}
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;
}
}
}
我确信此代码可以改进。让我知道是否有帮助。
答案 2 :(得分:0)
问题不在选定的布尔值中,而是在showRange()方法中。如果射线击中了一个对象,它将被选中,而其他三个则保持未选中状态((因为我使用的列表存储了最后一个被击中的对象,所以代码仅适用于该列表中的对象))
showRange()将不适用于所选对象。因为该方法希望所有四个对象都被选中,所以它可以工作(愚蠢的方法,因此我无法入睡)
感谢上帝,我设法解决了showRange()问题,使用了一个关闭所有游戏对象脚本组件并打开所选脚本的新脚本,这将使showRange()方法无法检查游戏的布尔状态。其他三个对象。
(希望您能理解我的解决方案)
(Guilherme,misher和Josep)感谢您的帮助,我真的很感激,但是如上图所示,问题不在布尔值中。
对于(Muhammad Farhan Aqeel),我相信您的代码应该可以工作,但是我没有设法使它工作,也许是因为我仍然对菜鸟还是陌生的,谢谢。