XNA-复制模型

本文关键字:模型 复制 XNA- | 更新日期: 2023-09-27 18:24:40

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

问题是,我希望不止一个玩家选择同一个角色,但player1Char = charDatabase[choosenChar];是参考,所以任何重复选择都会参考同一个模型。

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

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

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

XNA-复制模型

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

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

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