Войти
ПрограммированиеФорумОбщее

Когда код говорит что он не код, но он код![ЗАДАЧА]Unity

#0
12:02, 23 июля 2018

Итак столкнулся довольно с интересной проблемой.(Unity3d)
Постараюсь описать довольно внятно и был бы рад вразумительному ответу на решение данного вопроса.
Задание записать данные в хеш таблицу и использовать эти данные в игровом процессе.
хеш таблица пример

public void DropTableInitialize()
  {
    ItemDropList = new Hashtable();
    ItemDropList.Add ("1", "1*2*");
    ItemDropList.Add ("2", "3*4*");
    ItemDropList.Add ("3", "5*6*");
  }
Есть ScriptManager у него есть компонент "StaticVariables" код скрипта всего одна строчка которая должна хранить данные для поиска в хеш таблице специально статичная чтобы было легко получить доступ из любого места.
public static string CombatMapNumber;
Создаем обьект кнопку и пишем для нее скрипт,
public string numMap; 
public void StartMission()
  {
    StaticVariables.CombatMapNumber = numMap;
    print ("Ваш хеш по этой карте #"+StaticVariables.CombatMapNumber);
  }
numMap -заполняем в инспекторе числом 3.
Добавляем событие в клик , получается если мы нажимаем на эту кнопку то наша глобальная переменная CombatMapNumber=numMap следовательно CombatMapNumber= "3"
Дальше мы пытаемся проверить наш параметр по хеш таблице и получаем ВНИМАНИЕ! Пустой ответ! Не работает наш ключ "3" в хеш таблице! а если мы в самом скрипте "StaticVariables" во время объявления поля CombatMapNumbe присвоим ему "3" тогда все у нас работает!

В общем бред еще тот.

Так же есть промежуточный компонент который читает хеш и занимается спавном по полученным данным

if (StaticVariables.CombatMapNumber == "3" && StaticVariables.CombatMapNumber == 3 + "") {
      print ("3=3 3=3 бред ебучий!");
      StaticVariables.CombatMapNumber = "3";
    }
    GetComponent<HashData> ().HashReader (StaticVariables.CombatMapNumber);
в чем отличие между переменной посланной от куда то, которая между прочим ="3" и одновременно равна 3+"" от той что задается вот этой строчкой
StaticVariables.CombatMapNumber = "3";
это я понять не могу, дебаги выводят мне 3 всегда. хеш таблица не работает с 3+""


#1
12:16, 23 июля 2018

Ты для своей хэш таблицы не пробовал выбрать компаратор и поставщика хэш-кода?

#2
12:38, 23 июля 2018

DODge
нет не пробовал. компоратор  это обработчик входящего значения?

#3
12:44, 23 июля 2018
System.Collections.IComparer - объект, используемый для определения равенства двух ключей.
System.Collections.IHashCodeProvider - объект, предоставляющий хэш-коды для всех ключей в System.Collections.Hashtable.

В обоих случаях ты ничего не устанавливал, соответственно используются алгоритмы по умолчанию, а они не очень подходят к твоей задаче. Чтобы выбрать правильные читай MSDN.
#4
12:49, 23 июля 2018

У меня ваш код работает как надо,по крайней мере если я вас правильно понял. Возможно ли,что при StartMission() ещё не успели или вообще забыли сделать DropTableInitialize()?

#5
13:06, 23 июля 2018

Sazonoff
DropTableInitialize() инициализируется во время запуска приложения, а клик на кнопку уже во время работы приложения, так что он полюбому инициализируется раньше, и скорей всего ошибка бы валилась в консоль что хеш таблица не инициализированна. при любом ее запросе.

#6
8:00, 24 июля 2018

Исправил проблему, а проблема была в ReadHash, преобразовал Key из формата обьекта в формат строки...

#7
11:54, 24 июля 2018

BrawiX
> Задание записать данные в хеш таблицу и использовать эти данные в игровом процессе.
это где такие задания дают, если не секрет?

ПрограммированиеФорумОбщее

Тема в архиве.