某天,当你一不小心发现已经够随心所欲的驾驭3D摄像机之时,任何类型的3D游戏都将成为囊中玩物,过往如烟。
回忆逝去的童年让我极度惦记的SLG策略战棋游戏,或许对于大多数玩家来说,它费时费力不被讨好;然而深邃的内涵和无限可能的战略战术始终占据着我内心很大一片天地。于是,在本系列前5节2D SLG知识原理的基础上,萌发了移植一款基于平面的3D SLG Demo计划。
首先,什么是基于平面的3D SLG游戏?大伙不妨先看看以下几款该类型经典游戏巨作截图 - 《英雄无敌6》、《文明5》和《三国志11》:
无论地形单元格为四边形或六边形,其整体地貌都不存在高低起伏(No HeightMap);用游戏开发者的话说便是:三维空间中,一条轴用做旋转,另外两条轴形成类似2D中的Canvs平面承载对象。这样的设计更像是一盘3D化棋局,地形好比棋盘盘面,角色仿若棋子,附带一个环绕棋盘的360°轨道摄像机,无论视野还是战术方略都能得到淋漓尽致的体现。
当然,除此之外,层次感更分明,基于HeightMap地形的立面3D SLG游戏亦备受日系游戏青睐,不乏大作,比如《火焰纹章 晓之女神》、《皇家骑士团:命运之轮》和《三国志战记2》等,该类型游戏通常需要辅以更加复杂而强大的地形编辑器,这些内容并不属于本节范畴,后续章节中若有时间再做补充:
OK,做足了SLG游戏设计方面的知识准备,接下来我们要做的头等大事便是打开第4节的源码,神马差集运算、四叉树算法、蜂窝拓扑算法、A*算法等等统统一并拿来,将其中的Point改成Vector3(即原先的Point(X,Y)更换成Vector3(X,0,Y)),嘿嘿,原来编码也是可以这么浮云的。举个例吧,其中的DirectionScan方法在移植前后的对比:
2D游戏中所有我们看得到的图形都是通过Image图片的形式予以呈现,而到了3D游戏中,这条路已经行不通了。比如我们要绘制3D四边形或3D蜂窝状地形单元格,此时就得自己编写基于三角面合成的3D面控件:
Shape3D
Rect3D
Hex3D
其中四边形只需2个三角形即可,而六边形则需由6个三角形组合而成。
接下来再赋予这些单元格以纹理,配上之前移植过来的所有算法,很酷的3D地形即刻呈现在我们面前(额外提醒一下,在Draw时必须设置纹理的BlendState为Alpha 混合(basicEffect.GraphicsDevice.BlendState =BlendState.AlphaBlend;),否则这些纹理的透明部分将会被可恶的黑色所覆盖):
如此漂亮的地砖Tile,也得有能够与之相匹配的3D场景才算协调。话说3D场景与2D场景真是截然不同,3D场景大多基于模型,比如刚从网上下载的一个宫殿场景,还附赠了一个天空盒呢(顺带鄙视下该天空盒,即非半球又非四方,嗯,很有偷懒嫌疑):
将整个模型从3DMAX中导出成.X或.FBX文件后,我们便可在游戏中直接载入,很酷吧,天圆地方,魔兽出没皇宫中:
慢着,你刚才说啥来着?魔兽?
拜托呀,大哥。对埃及神话中那个狗头人身的死神不清楚就算了,如今,《魔兽世界》中如此伟大的“阿努比萨斯”活生生的矗立在你面前,汝等依旧能保持如此之淡定,小弟不胜佩服。
其实,此次Demo制作也印证了一个事实:《魔兽世界》中的模型大多还是以中低品质模型为主,奇迹的诞生并非与模型复杂度成正比。而目前市面上绝大多数的XNA骨骼动画模型素材管道最多仅支持72块骨骼解析,若想展示次世代模型还得找到更加强悍的素材管道才行(或者哪位大神帮忙写个?哈哈):
至此,3D SLG游戏场景全部布置完毕,接下来是操作部分。
2D游戏基于Canvas平面画布,鼠标点击的地方可谓所见即所得; 3D游戏则大为不同,无论它的显示载体是PC的显示屏还是Windows Phone的触摸屏,基于二维平面的点击/触碰操作要完成三维空间的精确拾取,仿佛是件不可能的事。
然而前人的智慧告诉我们,一条射线便可轻松搞定这一切,这就是传说中的
“3D射线拾取法”:
通过屏幕点击位置垂直于屏幕3D空间向内发射射线,利用射线的穿透效果拾取一切3D对象。
其实射线拾取法也可以通俗的理解为碰撞检测,用开发者的话说便是Ray是否与模型的BoundingBox、BoundingSphere、BoundingFrustum或某个Plane等对象存在交点:
在3D世界里,通常为了高性能检测模型之间的碰撞,会用到Box(立方体)、Sphere(球体)或者Frustum(锥体)包裹住模型,包裹物之间的交错关系即视为模型之间的碰撞关系。其实很多2D游戏也效仿了类似的做法来处理各类碰撞检测。
非常幸运的是,Engine Nine除了为我们提供强大的骨骼动画解析外,还拓展了Model里的Intersects方法,用于检测基于模型BoundingSphere的Pick操作,精确度还蛮高的,再配合上一些相关算法,最终便完成了3D SLG游戏中的角色模型拾取和单元格命中操作:
命中角色和拾取单元格处理
角色移动处理是3D SLG游戏制作的最后环节。设计方面通常有两种方案:第一种是由起点向终点沿寻路路径移动,这种基于A*算法的移动在我之前的教程都讲烂掉了不再赘述;而另外的则是像《英雄无敌3》那样直接做由起点向终点的直线移动(题外话,制作完Demo后才发现,基于六方格的地形真不适合沿路径移动,非常别扭)。后者实现方法也很简单,按照第七节开头所述原理,分割出X和Z分向量速度即可:
角色两种移动模式算法
嘿嘿,收工。
啥?
人太少不给力?
那么我们刷300个《魔兽世界》里的小怪出来开心开心吧,顺便也检测下本节的各种3D算法是否正确:
本节Demo源码下载地址:(WP)SLXnaGame3
在线演示地址:Cangod.com
手记小结:《魔兽世界》运行于Windows Phone 和 Silverlight之上,想想都让人口水直流;因为我们对游戏的执着与狂热,使得这个梦想变得不再遥不可及。 3D游戏开发今非昔比,日新月异的技术进步让它变得并非难如炼狱;长期的2D游戏积累和虔诚的设计感悟,从2D向3D转型一日千里。磨练过的勇士将创新出更多属于中国自己的游戏奇迹,你手中的键盘鼠标便是最锋利的战具!
Silverlight三国类万人国战页游 - 《战龙在野》封测全面开启,诚邀大家参与体验~
参考推荐:Nowpaper和Williams关于Windows Phone的游戏开发博客。
分享到:
相关推荐
vstemplate文件引用的向导类"Microsoft.Xna.GameStudio.Wizards.MultiProjectWizard"在程序集"Microsoft.Xna.GameStudio,Version=4.0.0.0,Culture=naeutral,PublicKeyToken=6d5c3888ef60e27d"中不存在。 那么将这个...
XNA框架是微软为简化游戏开发而推出的一套工具集和技术平台,它支持多种编程语言如C#,并且兼容Windows、Xbox 360等多个平台。本书《Building XNA 2.0 Games: A Practical Guide for Independent Game Development》...
《Wiley.XNA.3D.Primer》是一本专注于XNA框架3D编程的书籍,包含源码资源,为读者提供了深入学习3D游戏开发的机会。XNA是微软推出的一个开发平台,主要用于创建Windows和Xbox 360的游戏,特别适合初学者和业余开发者...
《Sams.Microsoft.XNA.Game.Studio.3.0.Unleashed.Feb.2009》这本书主要聚焦于微软的XNA Game Studio 3.0,这是一个为游戏开发者提供的强大工具集,允许开发者使用C#编程语言创建跨平台的游戏,包括Windows桌面、...
在IT领域,XNA是一个微软推出的开发框架,主要用于创建跨平台的游戏,特别是在Windows、Xbox 360和Zune设备上。XNA利用.NET Framework的C#编程语言,为开发者提供了一套全面的工具集,使游戏开发变得更加便捷。这款...
- **XNA**:XNA是微软推出的一套面向游戏开发者的跨平台开发工具包,主要应用于Windows、Xbox 360等平台上的游戏开发。 - **特点**: - 跨平台性:支持多个操作系统和设备。 - 高效性:提供高性能的渲染引擎和音频...
- XNA是一套由微软提供的跨平台游戏开发工具,主要用于开发Xbox 360和Windows平台的游戏。 - XNA提供了图形处理、声音效果、网络通信等功能模块,使得开发者能够更高效地进行游戏开发。 - XNA支持多种编程语言,...
本书《Packt.XNA.4.3D.Game.Development.by.Example.Beginners.Guide》是一本专为初学者设计的XNA 3D游戏开发教程,通过实例引导读者逐步掌握XNA框架下的3D游戏开发技术。该书不仅提供了丰富的示例代码,还通过详尽...
《Professional XNA Game Programming》是一本专为游戏开发者设计的指南,主要涵盖了使用Microsoft的XNA框架进行游戏编程的专业知识。XNA是一个强大的工具集,它简化了在Windows、Xbox 360以及Zune等平台上开发游戏...
《Sams.Microsoft.XNA.Game.Studio.3.0.Unleashed》是一本深入解析Microsoft XNA Game Studio 3.0的书籍,由Chad Carter撰写,于2009年出版。本书旨在帮助游戏开发者充分利用XNA框架进行游戏开发,涵盖了从基础到...
本书《Packt.Building.your.First.Mobile.Game.using.XNA4.2013》是一本关于如何使用XNA 4.0开发工具为Windows Phone 7平台构建你的第一个3D手机游戏的快速、实践指南。书中详细介绍了Windows Phone 7平台下3D游戏...
3. **跨平台**:虽然XNA最初设计用于Windows和Xbox 360,但现在有开源项目如MonoGame,使得基于XNA的游戏可以移植到iOS、Android和其他平台。 4. **易学性**:XNA使用C#编程语言,相比Direct 3D的原生API,C#语法更...
XNA 是微软推出的游戏开发框架,它为开发者提供了构建跨平台游戏的便捷工具,支持Windows、Xbox 360以及Zune设备。这本书的出版日期为2010年9月,由Packt Publishing出版。 在XNA 4.0版本中,微软对先前的XNA框架...
同时,XNA游戏也可以跨平台运行,支持Windows桌面、Xbox 360以及Zune设备,这大大拓宽了游戏的受众范围。 总的来说,使用C#和XNA框架开发小游戏,开发者可以充分利用这两者的优点,快速构建出具有专业级别的游戏...
《Learning.xna.3.0源码》是一个与XNA框架相关的学习资源,它包含了《Learning.xna.3.0》这本书中所讲解的各种示例程序的源代码。XNA是一个由微软开发的游戏开发框架,主要用于创建Windows桌面游戏、Xbox 360游戏...
3. **输入处理**:C# XNA提供了方便的键盘和鼠标输入管理,使得玩家可以通过键盘控制坦克移动和射击。通过监听键盘事件,我们可以实时更新坦克的状态。 4. **图形渲染**:XNA提供了强大的2D绘图功能,包括精灵...
XNA是2D和3D游戏开发方式。当年您也可以使用Silverlight来写游戏,或者使用XNA来编写一个以数据为中心的应用程序。每个应用程序框架都有其自身的优势;选择合适的编程模型,可以使您的生产率大幅提高,并且缩短应用...
《Packt.Windows.Phone.7.XNA.Cookbook.2012》这本书是针对Windows Phone 7平台,利用XNA框架进行游戏和图形应用开发的一本实战指南。它旨在帮助开发者掌握XNA在Windows Phone 7上的应用技巧,提供了一系列实用的...
Microsoft XNA Game Studio 4.0是一款由微软开发的游戏开发工具包,它主要用于创建跨平台的游戏应用,尤其是针对Windows和Xbox平台。XNA提供了一套完整的API集合,包括图形、音频、网络以及输入管理等功能,帮助...