如何在 Unity 的 C# 中使用变量(字符串)给出的名称实例化类中的对象
本文关键字:对象 实例化 字符串 变量 Unity | 更新日期: 2023-09-27 18:36:53
这是我的类:
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
等。
您不能在运行时创建变量名称,如果可能的话,这不是适合您的级别的基本情况。
最好是考虑一个数组:
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 字母。
如果你这样做是为了让你有一些东西,比如相同类型的多个唯一对象的列表,比如屏幕上的多个敌人,你可以更好地使用以下方法:
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 类对象的新的唯一实例添加到易于访问的列表中。 与使用数组相比,使用此方法的好处是无需提前确定最大大小,可以根据需要动态添加和删除对象。