Страница 1 из 2

Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 18:19
NOVA
К примеру. Имеется динамический List of Gameobjects. Где эти ГО добавляются и удаляются.
Необходимо создать ещё Динамический List of Vector3, привязанных по смыслу к каждому ГО. Ну лучше чем привязать по имени я пока способа не нашёл.
Поэтому надо объявить переменную с названием по имени ГО листа.
Что-то типа.
List<Vector3> Variable.name=GO.name
GO может быть тоже переименован.

А если конкретней, то что-то типа этого
Синтаксис:
Используется csharp
 public void AddTracker()
    {
        Trackers.Add(Instantiate(TrackerPrefab, new Vector3(0, 0, 0), Quaternion.identity));
        Trackers[Trackers.Count - 1].name = "Tracker" + Trackers.Count.ToString();
        List<Vector3> (TrackerName+CameraName);
        foreach (GameObject SingleTracker in Trackers)
        {
       (TrackerName+CameraName).add(new Vector3 (0,0,TrackerSize))
}
}

Может я вообще не туда копаю?
Кажется нужен двумерный массив List <Vector3> (string,int)

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 19:14
Anonymyx
Вам нужен словарь, dictionary.
Если я правильно понял...

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 19:31
NOVA
Спасибо. А он динамический? А простенький примерчик есть? Гуглится что-то страшное.
Задать словарь с переменной Vector3
Добавить в словарь
Получить количество по strings или по int.
Нашёл что-то более менее вменяемое
https://metanit.com/sharp/tutorial/4.9.php
Но не понял, что там за тип переменной.
Могу я хранить Vector3 или GO в словаре с индексами со всеми вытекающими трансформами и получением имени, индекса ?

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 19:47
Anonymyx
Извините за тупость, но я слегка не догоняю вас.
Могу я хранить Vector3 или GO в словаре с индексами со всеми вытекающими трансформами и получением имени, индекса ?

Можете.
Dictionary<тип1, тип2> dictionary = new Dictionary<тип1, тип2>();
Вместо тип1 и тип2 подставляете любой тип.
Тип1 это ключ, через индексатор обращаетесь к ключу, и возвращается значение связанное с этим ключом.
Если 2 типов мало, можете сделать примитивную структуру, которая будет хранить нужные типы, и подставляете его в тип2.
Индексатор - это квадратные скобки. dictionary[key].

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 19:52
ru66ssb
при добавлении в List так же ведь и добавляется индекс записи - почему на основании него не связать 2 List ?

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 19:55
NOVA
Я тоже чего-то не догоняю.
Это больше похоже на какую-то таблицу.

Вот когда я создаю лист из ГО
public List<GameObject> Trackers;
Я могу задав индекс получить или назначить имя ГО, его transform, ещё и обратится к скрипту на нём.
Например
Trackers[2].name = "Tracker2" ;

Что я могу сделать задав словарь?
Dictionary <string, int> TrackerDictionary;

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 20:00
Anonymyx
Короче, вам надо сделать так, чтобы у вас была что-то вроде таблицы, которая будет хранить объект, и позицию этого объекта?
Или не так.
У вас там в шапке Vector3, string и int.
Создает структуру
public struct Wrapper
{
public Vector3 position;
public string name;
public int iValue;
}

Создаем лист типа этой структуры
List<Wrapper> list = new List<Wrapper>();

Вам это надо?

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 20:09
NOVA
Да похоже на то. Кот в мешке кота, который в мешке кота по сути. Только как-то хотелось бы нормальный двумерный List. А словарь он какой-то хоть тип переменной содержит? Если представить его как таблицу String, int.
То есть берём такой string и такой int и получаем какой-то тип переменной со всеми параметрами. Или это уже вообще не двумерный массив? Не пора ли на матрицы переключаться?
Допустим имеем имя главного объекта, имеем его номер по порядку (в партии "едро", 10-тый человек слева), получаем его координаты x,y,z и name до кучи. А ещё обращаемся к его скрипту головного мозга и т.д.
Вроде как с нединамическими массивами работает это. Фиг с ними со strings, хотя бы два integer. Но в динамическом массиве.

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 20:42
Woolf
А почему не сделать структуру, которая хранит и ваш GO и ваш Vector3, и хранить в листе сразу всю структуру?

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 20:50
NOVA
Woolf писал(а):А почему не сделать структуру, которая хранит и ваш GO и ваш Vector3, и хранить в листе сразу всю структуру?

Ой а поподробнее?

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 20:52
Anonymyx
facepalm

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 20:59
snezhok_13
Woolf правильно вам подсказывает) нужна структура, Dictionary Вам не нужна если не нужен поиск по этой строке. Если вы все время будете перебирать все объекты, то список структур то что вам нужно.

В C# можно так
Синтаксис:
Используется csharp
class MyClass {
  string Name;
  Vector3 Position;
}

List<MyClass> myList = new List<MyClass>();

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 21:02
NOVA
Anonymyx писал(а):facepalm

List<Wrapper> list = new List<Wrapper>();
Вот это может быть и верное решение, я просто не понимаю как с этим работать. Тут три слова List в одной строке

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 21:04
Anonymyx
"list" - это просто имя листа.
А что непонятно? Как добавлять элементы?

Re: Как объявить переменную с именем равным String?

СообщениеДобавлено: 18 июл 2017, 21:08
NOVA
Чорт возьми, опять я задумался и не ожидал верного ответа. Только что гуглил какие-то листы в листах. Всё понял. Буду пробовать. Спасибо.