《XML and the Content Pipeline》一文对XML Content Pipeline做了些许介绍,不熟悉的朋友可以先看下。
游戏制作通常需要很多类型的资源,经典的贴图、声音和模型等资源可以通过XNA内嵌的几种Content编译器进行处理,详情参考XNA 3.1 Content Pipeline结构图。其中有一条“.xml→XmlImp
XNA-XML文件通过XnaContent/Asset节点Type属性指定对应代码中的类,注意这里要用全命名空间签名。Asset节点下的内容则为该类具体的数据,配置格式复杂度还处于能接受的范围内,比较适合手工配置。但如果要批量生产的话,还是需要有相应的编辑器。编辑器需要能无缝的对XNA-XML文件进行读写并转换成能共编辑器内部使用的对象。HOW?
Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate名字空间下有个IntermediateSerializer类,provides methods for reading and writing XNA intermediate XML format。其中的静态方法Serialize可以将对象直接序列化为XNA所需要的XML资源文件格式,Deserialize方法又可直接将XNA-XML资源文件反序列化为对象,而且不需要任何额外的代码。
传统的游戏编辑器制作工艺上是以二进制存档为主的。编辑器中需要包含对二进制存档的序列化和反序列化代码,游戏中仅需包含一份反序列化代码。
XNA-XML存档格式是明文的。通过IntermediateSerializer,编辑器无需写任何代码则可自动实现对XML存档的序列化和反序列化,但仍需实现游戏对象和xnb文件之间的序列化(ContentTypeWriter)和反序列化(ContentTypeReader)代码。
从工作量上来讲,XNA-XML存档格式并不会比原来的二进制存档格式多,都需写一份游戏对象和二进制存档之间的序列化和反序列化代码。而XML明文存档所具有的优势,这点《UNIX编程艺术》中讲的太多的,自然不必赘述。再加上XNA对整个Content Pipeline的有效控制,对资源管理的优秀封装,还有让人赏心悦目的C#语法……
XNA XML Content Pipeline对游戏编辑器的制作无疑是巨大的福音!
参考:
《XNA Framework Content Pipeline简介》
评论