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