Использование одного и того же логического значения с несколькими объектами в Unity 2D - PullRequest
0 голосов
/ 03 мая 2019

У меня есть четыре игровых объекта с одинаковым сценарием и одним и тем же bool, когда один из них получает удар лучом, состояние bool имеет значение 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;
        }
    }
}

Ответы [ 3 ]

1 голос
/ 05 мая 2019
0 голосов
/ 06 мая 2019

Проблема не в выбранном bool, а в методе showRange ().Если луч попадет на один объект, он будет выбран, а остальные три останутся невыбранными ((потому что я использую список, в котором хранится последний объект, на который был нанесен удар, тогда код работает только для объекта внутри этого списка))

showRange () не будет работать с выбранным объектом, потому что метод хочет, чтобы все четыре объекта были выбраны, затем он работает (глупый метод, я не мог заснуть из-за этого).

Мне удалосьисправить проблему showRange (), используя новый скрипт, который отключает все компоненты скрипта игровых объектов и включает один выбранный скрипт, что делает метод showRange () неспособным проверять состояние bool других трех объектов.

Ибо (Гильерме, Мишер и Джозеп) спасибо за вашу помощь, я действительно ценю это, но, как показано выше, проблема не была в булевом.

Для (Мухаммед ФарханОтвет: Я верю, что ваш код должен работать, но мне не удалось заставить его работать, может быть, потому что я все еще новичок в программировании.

0 голосов
/ 03 мая 2019

Попробуйте использовать gamemanager.

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

Ваш игровой менеджер может иметь общедоступную переменную bool "selected".

Новый метод запуска:

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;
    }
}
}

Я уверен, что этот код можно улучшить.Дайте мне знать, если это поможет.

...