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

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

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

Сообщение snezhok_13 18 июл 2017, 23:54

Почитайте у Эндрю Троэлсена в книге про generics. Да и вообще ее почитайте) У вас очень новичковые вопросы
Разработка игр, немножко игровая журналистика, сейчас делаем Календарь: даты выхода игр
Аватара пользователя
snezhok_13
UNIверсал
 
Сообщения: 450
Зарегистрирован: 09 сен 2013, 11:12
Skype: s.coremission
  • Сайт

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

Сообщение ru66ssb 19 июл 2017, 05:59

создание своего класса - это очень правильно...сам пока еще только читаю литературу..но если нужно просто и быстро то вот :

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class create : MonoBehaviour {

    public GameObject go;
    List<GameObject> gb = new List<GameObject>();
    List<Vector3> gbPos = new List<Vector3>();

        // Use this for initialization
        void Start () {
       

        for (int i =0; i < 6; i++)
        {
            gb.Add(go);
            gbPos.Add(new Vector3(i,0,0));
            Instantiate(gb[i], gbPos[i], Quaternion.identity);
            Debug.Log("Объект №" + i + " Позиция x - " + gbPos[i].x + " Позиция y - " + gbPos[i].y + " Позиция z - " + gbPos[i].y);
           
        }
        Debug.Log("Количество объектов всего - " + gb.Count);

    }

   
}

 


здесь мы имеем 2 списка List связанных между собой по индексу (gb[i] и координаты для него gbPos[i]). при работе с ними стоит быть внимательными - т.е. при добавлении/удалении gb так же нужно и делать с gbPos
Аватара пользователя
ru66ssb
UNIт
 
Сообщения: 107
Зарегистрирован: 27 июн 2015, 07:01

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

Сообщение Woolf 19 июл 2017, 14:31

class create

Вот за такое надо бить линейкой по пальцам. Вы зачем такое название класса выбрали? Это уже, сразу на этапе проектирования, потенциальное обиталище бага с зарезервированными где-то словами. И вообще, названия классов принято писать с большой буквы. Еще, create - это действие, именем класса обычно выбирают не действие, а существительное. Если так хочется, то, например, Creature, но никак не Create.

т.е. при добавлении/удалении gb так же нужно и делать с gbPos

Еще одна ошибка проектирования. Ну вот кто мешает-то сделать структуру:

Синтаксис:
Используется csharp
public struct GoElement {
  public string ElmntName;
  public GameObject GOObj;
  public Vector3 pos;
}


и хранить эту структуру в листе, если так уж хочется:

Синтаксис:
Используется csharp
public List<GoElement> elmntList=new elntList<GoElement>();


И мы имеем для каждого объекта GO связанные с ним Vector3 и имя, если так уж хочется ТСу. Понадобится еще чего либо, например, несколько полей int, мы всегда можем это добавить в нашу структуру и наша структура и список от этого не развалится.
Единственный минус, что дефолтный редактор Unity не умеет такую структуру править в редакторе, решается написанием небольшого скрипта для редактора.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение Anonymyx 19 июл 2017, 15:13

Что вы имеете ввиду под "править"?
[System.Serializable] для структуры и этот лист будет виден в редакторе.
Или вы не про это?
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

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

Сообщение Woolf 19 июл 2017, 15:45

Anonymyx писал(а):Что вы имеете ввиду под "править"?
[System.Serializable] для структуры и этот лист будет виден в редакторе.
Или вы не про это?


Хм, возможно.. Но, вроде, я сталкивался, что редактор не умеет такие структуры сериализовать, но может быть я ошибаюсь. Если так, то еще и проще всё.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение NOVA 19 июл 2017, 16:53

Не хотелось бы отвлекать вас от вашей дискуссии, но я так и не понял как добавить данные в этот List. Гуглил честных 2 часа. И видимо не нашёл понятного примера. Образование высшее, гуманитарное))).

Синтаксис:
Используется csharp
public struct Trackers
    {
        public GameObject Tracker;
        public int TrackerCamIndex;
        public Vector3 TrackerCamPos;
    }
    List<Trackers> list = new List<Trackers>();
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

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

Сообщение samana 19 июл 2017, 17:06

Вы хотите добавить данные из кода, или через инспектор?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение Anonymyx 19 июл 2017, 17:09

Давайте для удобности создадим конструктор для нашей структуры:

Синтаксис:
Используется csharp
public struct Trackers
    {
        public GameObject Tracker;
        public int TrackerCamIndex;
        public Vector3 TrackerCamPos;

               public Trackers(GameObject tracker, int index, Vector3 position)
               {
               Tracker = tracker;
               TrackerCamIndex = index;
               TrackerCamPos = position;
               }
     
    }
 


Добавляем:
GameObject tracker = Instantiate(...);
...
list.Add(new Trackers(tracker, someIndex, Vector3.zero));

Т.е.:
list.Add(
Создаем новый экземпляр - new Trackers - наш новый элемент листа.
Дальше открываем скобки - это наш конструктор, туда можно передать данные
(объект, индекс, позиция
закрываем конструктор
)
И того:

list.Add(new Trackers(нашОбъект, егоИндекс, егоПозиция));

...
Это если через код.
Через инспектор:
Над созданием структуры, т.е. тут:
public struct Trackers
пишем это:
[System.Serializable]
Т.е.:
[System.Serializable]
public struct Trackers
{...

Делаем паблик лист:

public List<Trackers> trackers = new List<Trackers>();
И этот лист будет виден в инспекторе.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

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

Сообщение NOVA 19 июл 2017, 17:19

Спасибище. Я тут пока ждал ответ только что умудрился нагуглить вот такую статейку, где тоже всё разжёвано.
http://tealeaf.mmailm.lclients.ru/page/2/18
Думаю на основе Ваших данных и этой статейки осилю наконец.

Зы. Осилил. Ура.

В классе
Синтаксис:
Используется csharp
[System.Serializable]
    public struct TrackerStruct
    {
        public GameObject Tracker;
        public int TrackerCamIndex;
        public Vector3 TrackerCamPos;
    }
       public List<TrackerStruct> Trackers = new List<TrackerStruct>();


В методе

Синтаксис:
Используется csharp
 public void AddTracker()
    {
        foreach (GameObject SingleCamera in Cameras)
        {
            GameObject tracker = Instantiate(TrackerPrefab, new Vector3(0, 0, 0), Quaternion.identity);
            tracker.name = "Tracker" + Trackers.Count.ToString()+ "." + SingleCamera.name;
            Trackers.Add(new TrackerStruct
            { Tracker = tracker, TrackerCamIndex = Cameras.IndexOf(SingleCamera), TrackerCamPos = Vector3.zero, });            
        }
    }
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

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

Сообщение NOVA 19 июл 2017, 22:13

В итоге я получаю кучу GameObjects с разными именами.
Изображение
А хотелось бы получить один GameObject со списком id камер и Vector3 для каждого id camera.

Примерно так.
Изображение
Получается надо создавать одномерный лист, а внутри какую-то структуру. У каждого трекера должны быть свои координаты, имя и Vector 3 для каждой камеры.
Последний раз редактировалось NOVA 19 июл 2017, 22:21, всего редактировалось 1 раз.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

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

Сообщение Anonymyx 19 июл 2017, 22:19

Ну так не создавайте объекты :)
В структуре GameObject замените на string.


Trackers.Add(new TrackerStruct
{ Tracker = "Tracker" + someIndex, TrackerCamIndex = Cameras.IndexOf(SingleCamera), TrackerCamPos = new Vector3(x,y,z )};

Создание с Instantiate я для примера написал.
Или можете через инспектор.
Получается надо создавать одномерный лист, а внутри какую-то структуру. У каждого трекера должны быть свои координаты, имя и Vector 3 для каждой камеры.

Мы это еще 19 постов назад сделали. :ymparty:
Последний раз редактировалось Anonymyx 19 июл 2017, 22:24, всего редактировалось 1 раз.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

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

Сообщение NOVA 19 июл 2017, 22:23

Аблин точно и добавить туда четвёртый параметр Vector3 для позиции в 3d координатах.
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia

Пред.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18