您不能将类作为指针使用。也许在最新的C#中可能发生了改变,但我不确定。那根本行不通。任何引用类型都不能与指针一起使用。
像int、float和bool等简单类型可以用作指针。
即使您在Tile结构中声明GameObject go变量,也不行。
不建议在结构体内部声明引用类型,特别是在游戏应用程序中,因为这会使垃圾回收器不必要地扫描结构中要销毁的对象,从而降低速度。当您有数百万个带有引用对象的struct时,情况就更糟了。
我的建议是使用整数代替GameObject *。该整数应使用GameObject的instanceID进行初始化,而不是使用GameObject引用或指针。
然后,您可以使用Dictionary将instanceID(int)映射到GameObject。当您想要访问GameObject时,请提供存储在Tile结构中的intanceID。这将加快所有操作。
例如:
struct Tile
{
int goID;
public Tile(int goID)
{
this.goID = goID;
}
}
使用方法:
Dictionary<int, GameObject> idToObj = new Dictionary<int, GameObject>();
Tile[] tiles = new Tile[1000];
GameObject obj = new GameObject("obj");
//Create new Instance with Instance ID
tiles[0] = new Tile(obj.GetInstanceID());
//Add to Dictionary
idToObj.Add(obj.GetInstanceID(), obj);
最后,值得测试一下看哪个更快。先使用在 struct 中声明的 GameObject 进行测试,然后再使用上面介绍的使用 int
和 Dictionary
的方法进行测试。
class
而不是struct
,并使用new
创建类的对象,这样对象就会在大堆上创建,而不是小栈上。 - Tobias Knauss