2016-03-01 176 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()); 

这里的问题是我不想手动创建对象的名称。我想创建,例如,m1m2m3

+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

我试过,当我声明列表它说: 无法找到类型或命名空间名称列表。你是否缺少using指令或程序集引用? –

+0

对不起,我忘记了使用声明。我已更新我的示例 – Taegost

+0

谢谢。我会坚持这个解决方案,因为我想实例化一个未定义数量的对象并获取它的属性。就我而言,List比数组更适合。 –

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

相关问题