我正在制作一个游戏,其中涉及将对象放置在房间中。房间存储可以放置在其中的对象列表,例如
List<RoomObject> possibleObjects = new List<RoomObject>(){ new Bed(), new Table() };
然后将这些对象分别发送到允许用户单击按钮的按钮,进入所选对象的放置阶段,然后用户在房间中单击,然后放置对象。
例如
public Room currentRoom;
public RoomObject currentObject;
//...
public void onClick()
{
if (CanPlace) currentRoom.Add(currentObject);
}
我的问题是,如果用户想要放置多个相同的对象,它的当前设置方式将意味着完全相同的对象将被添加到房间,并且如果该对象稍后以某种方式进行编辑(例如床.occupied = true),它将影响房间中该类型的所有对象。
有没有一种方法可以复制一个对象(以获得单独的引用),而我不必使用反射(我不是很熟悉,感觉是不安全的代码)。
我假设反射方式将传递一个类型,然后必须使用 Type.GetConstructor 调用构造函数,但如果可能的话,我宁愿不这样做。如果反射是唯一的方法,有人可以提供如何做到这一点的示例代码吗?
编辑 - 也许我需要指定我的变量 currentObject 不会保存类型 RoomObject 的变量,而是一个子类,例如 Bed。(床继承自 RoomObject)。