2016-03-01 2 views
1

Вот мой класс:Как создать экземпляр объекта из класса в Unity в C# с именем, заданным переменной (строка)

public class Mark { 

    public GameObject InstanciatedObject; 
    public Vector3 ControllerPosition; 
    public Quaternion ControllerRotation; 

    public void CreateMark(Mark m, GameObject o, Vector3 p, Quaternion r) 
    { 
     m.InstanciatedObject= o; 
     m.ControllerPosition= p; 
     m.ControllerRotation = r; 
    } 
} 

И я хочу использовать следующие строки в другой сценарий:

Mark m = new Mark(); 
m.CreateMark(m, ControllerObject, GetControllerPosition(), GetControllerRotation()); 

Проблема в том, что я не хочу вручную создавать имя объекта. Я хочу создать, например, m1, m2, m3 и т.д.

+0

Вы можете вызывать экземпляры классов как угодно, но сами имена классов должны быть исправлены. Если вы не хотите взглянуть на создание динамических объектов: https://msdn.microsoft.com/library/ee461504%28v=vs.100%29.aspx – ManoDestra

ответ

0

Если вы это делаете, так что вы можете иметь что-то такое, как список нескольких уникальных объектов одного и того же типа, например, нескольких врагов на экране может быть лучше, обслуживаемой с помощью следующего:

public class Mark { 

public GameObject InstantiatedGameObject; 
public Vector3 ControllerPosition; 
public Quaternion ControllerRotation; 

public Mark(GameObject o, Vector3 p, Quaternion r) 
{ 
    InstantiatedGameObject = o; 
    ControllerPosition = p; 
    ControllerRotation = r; 
} 

Затем, вы должны использовать следующий код:

using System.Collections.Generic; 

public class Main { 

    public List<Mark> MarkList = new List<Mark>() 

    public void Main() { 
     // do stuff to get the needed variables 
     MarkList.Add(new Mark(ControllerObject, GetControllerPosition(), GetControllerRotation())); 
    } 
} 

Это будет продолжать добавлять новые, уникальные экземпляры объектов класса aMark в легко доступный список. Преимущество использования этого метода с использованием массива заключается в том, что вам не нужно заранее определять максимальный размер, вы можете динамически добавлять и удалять объекты по мере необходимости.

+0

Я пробовал это, и когда я объявляю Список, он говорит: Не найдено имя типа или пространства имен 'List '. Вам не хватает указаний по использованию или ссылки на сборку? –

+0

Ах, извините, я забыл использовать инструкцию. Я обновил свой пример – Taegost

+0

Спасибо. Я буду придерживаться этого решения, потому что хочу создать экземпляр неопределенного количества объектов и использовать его свойства. В моем случае список лучше, чем массивы. –

1

Вы не можете создавать имена переменных во время выполнения, если это возможно, что не было бы основные положения подходит для вашего уровня.

Лучше всего было бы рассмотреть массив:

MarksArray [] m = new MarksArray[size]; 

for(int i = 0; i < size ; i ++){ 
    m[i] = new Mark(); 
    m[i].CreateMark(param1, param2,...); 
} 

, то вы можете использовать переменную так:

m[0].member = value; 

В качестве примечания, вы должны начать соблюдение C# кодирования конвенции, классы и методы используют букву Cap на передней панели.

+0

Я думаю, что это будет сделано. Спасибо за быстрый ответ. И да, я буду иметь в виду соглашение о кодировании с этого момента. Я фактически создаю свои собственные соглашения, так что мой код не становится слишком грязным, но я понимаю, что лучше следовать общим правилам, поэтому другим программистам тоже легко понять. –

+0

Массивы хороши, если вы знаете размер заранее, для игры, вероятно, будет довольно много случаев, когда вам понадобится динамический список, хотя – Taegost

+0

Соглашение о кодировании довольно важно, поскольку Unity предоставляет определенное соглашение. Это явно отделит ваш код от кода Unity, но я бы не рекомендовал его. И однажды вы, вероятно, будете работать с другими, им это не понравится, и тогда они вам не понравятся. Что касается конфликта массива/списка, вы можете переходить от одного к другому, если это необходимо. Не лучшее, но все же возможно. – Everts

Смежные вопросы