解决:XNA 程序调试报错 NullReferenceException was unhandled

NullReferenceException was unhandled

3D Graphics with xna Game studio 4.0
06 Skinned Model
学习笔记


经代码跟踪发现产生该问题的原因为程序在加载三维模型后 model.Tag=null;引起下面这句编译不能通过。
即下面的这句:
Model manModel = Content.Load<Model>("dude");
            skinnedModel = new SkinnedModel(manModel,
            Vector3.Zero, new Vector3(0, MathHelper.Pi, 0), new Vector3(10),
            GraphicsDevice, Content);

出错的地方:
this.skinningData = model.Tag as SkinningData;

 

分析为模型加载没有得到model.Tag值,怀疑为模型加载错误引起。

经过对比,发现本程序中生成的dude.xnb(在"bin\x86\Debug\Content"文件夹中)比示例程序生成的少。
后将示例程序中的dude.xnb文件复制到本程序中后,即可正常运行。


究其原因,是dude.fbx 属性中的 素材处理器类 (content processor class)没有选择自定义专用的处理类,而是选用系统默认的素材处理类,如下图所示。

素材处理器类(content processor class)相关介绍:
http://shiba.hpe.sh.cn/jiaoyanzu/wuli/showArticle.aspx?articleId=363&classId=4
注意本例中的应选自定义的SkinnedModelProcessor类,用于将自定义的一些动画数据存储在
model.Tag中,否则如果选择默认或别的素材处理类,将会出现 model.Tag=null;因为选择默认的
素材处理器类他没有进行这样的处理。


参考:

   XNA的Model类有一个Tag属性可以将自定义的数据添加到模型中。使用dictionary作为Tag属性

,你可以将不同的自定义对象添加到Model类中,并可以实时通过使用string查询到这些对象。

    注意你设置在ModelContent对象Tag属性中的数据会一起存储在二进制的XNB文件中,当使用

content manager载入模型时这些数据会重新还原。

--

原文地址:https://www.cnblogs.com/furenjun/p/xnaShinnedModel.html