@Zimaell

От чего могут сбрасываться значения переменных?

Выбросил из скрипта все лишнее и оставил только дебаг и вот что увидел

spoiler
public class Cell : MonoBehaviour {
  public int X, Y;
  public Move = false;
  void OnMouseDown(){
    Move = true;
    }
void Update(){
    if(Move) Debug.Log(X + "," + Y);
    }
}
#-----------------------------------------------------
public class Board : MonoBehaviour {
  public Dictionary<(int, int), GameObject> Cells = new Dictionary<(int, int), GameObject>();
  void Start(){
    CreateBoard();
    }

  void CreateBoard(){
    for(int y = 0; y < 5; y++){
      for(int x = 0; x < 5; x++){
        GameObject PrefabResources = Resources.Load("Prefabs/test", typeof(GameObject)) as GameObject;
        Cells[(x, y)] = Instantiate(PrefabResources, new Vector3(x, y, 0), Quaternion.identity) as GameObject;
        Cells[(x, y)].AddComponent<Cell>();
        Cells[(x, y)].GetComponent<Cell>().X = x;
        Cells[(x, y)].GetComponent<Cell>().Y = y;
        }
      }
    }
}

И в итоге когда я нажму на какой-то объект я получаю следующий дебаг к примеру

3,5
0,0
3,5
0,0
3,5
0,0
............

но ведь эти переменные не должны изменяться, в данном случае должно выводиться 3,5 всегда, в Cell нигде этим переменным 0 не присваивается, объекты выстраиваются один раз и один раз им присваиваются значения, от чего такое может быть? (на префабах ничего не прикреплено изначально)
  • Вопрос задан
  • 29 просмотров
Решения вопроса 1
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
Вы словарь используете, не юнити-массив (кстати, почему нет?), а в словарь элементы через Add() добавляются. Подозреваю именно по этому оно не работает.

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

Всё не так. Должны быть события и действия, а не "вычисления" по всей доске. Двигаете кубик, он касается другого кубика и говорит ему "привет, я кубик из точки XY, двигайтся туда". А второй кубик двигается, и по завершению говорит контроллеру например "эй, контроллер, я на месте, считай очки". Тогда даже массив не нужно хранить, объекты будут взаимодействовать без централизованного контроля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы