0

我正在开发一款游戏,我有一个每个玩家可以选择的可用角色列表,每个角色都包含一个(3D)模型和一个已通过内容管道加载的Texture2D图标。

问题是,我希望多个玩家选择同一个角色,但这player1Char = charDatabase[choosenChar];是通过引用,所以任何重复选择都将引用同一个模型。

这是我要复制的 Character 类的构造函数,CModel 类只是一个具有该模型的位置、旋转和缩放值的模型。

public Character(CModel model, string name, int HP, Vector2 iconPositionOnSheet)

我想我想做的是对该类进行深层复制,但 Model 类不可序列化。我能想到的唯一另一种方法是使用 Content.Load 从其文件中加载相同的模型,如果选择了重复,但我想知道是否有一种方法可以简单地复制字符类并因此复制模型,因为这对我来说会更容易。

4

1 回答 1

0

不是将模型对象传递给构造函数,而是传递 ContentManager 对象(内容)和模型的文件名字符串。然后在构造函数的主体中,调用Content.Load<Model>(filename). 然后,如果您想给它一个替代颜色或纹理,请克隆 basicEffect 并使用您希望该角色拥有的纹理/颜色重置它,然后您就可以设置了。

现在,一个新的模型对象将从另一个相似模型分配到堆上的其他位置(实例化),因此两个玩家都可以拥有一个唯一的对象。

内容管理器所做的一件聪明的事情是重用已经加载的 GPU 资源。因此,如果您再次加载模型,尽管它为您的 c# 提供了堆上的唯一引用,但两个模型对象将使用相同的顶点缓冲区和效果,因此它们不必被实例化两次。

于 2013-07-24T01:59:37.923 回答