如何在Unity的C#中使用变量给出的名称从类中实例化对象(字符串)

时间:2016-03-01 18:59:33

标签: c# oop unity3d

这是我的班级:

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等。

2 个答案:

答案 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字母。

答案 1 :(得分: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类对象的新的,唯一的实例添加到易于访问的列表中。使用此方法而不是使用数组的好处是您不需要提前确定最大大小,您可以根据需要动态添加和删除对象。