如同动态光影一样,天气系统同样为2.5D RPG游戏所不可或缺的元素之一。从视觉角度讲,天气系统让游戏场景空间层次分明,立体感更强;从用户角度讲,天气系统赋予游戏更贴近现实的亲历体验,试想下游戏中的花花草草随风而动,云雾缭绕风雨雷电一切来得自然而平滑,玩家即似身临其境般享受;从功能角度讲,不同的气候状况会对角色及魔法效果产生各异影响,极大的提升游戏趣味性。
模拟相对较真实的天气效果,粒子系统必不可少,天气中的雨、雪、闪电、云雾等均可看做是大量粒子的集合。因此首先我们新建一个名为Particle的粒子类,然后再新建天气对象Weather,本节中我为Weather编写了常见的6种天气状态分别为:下雨、刮风、飘雪、雷电、云雾、天惩。每种天气的实现方式大同小异,特别强调随机性及仿真性,重点是把握住粒子的移动轨迹及销毁处理。另外,游戏设计之初天气层的位置就应当确定下来,如果仅仅是想做一些简单的天气效果,比如不随场景移动的雨、雪等,那么只需将Weather放置于游戏窗口中即可;而如果要制作全局性的比如云雾游走、落雷闪电等,则需将Weather放置于场景空间中。当然,一切天气粒子都处于场景空间中效果会最真实,但性能开销偏大,毕竟你要用这些粒子布局填满整个地图尺寸而不仅仅是屏幕宽高。
因此,同时也为了更方便的进行场景特效渲染,我们得清楚的划分好场景各层次及它们之间的关系,我的思路大致如下:
由天气层外搭配上HLSL实现的日夜交替、梦回过去效果,最终使得整个天气状态系统显得尤为真实而丰富。当然,目前Silverlight 4 还无法对HLSL效果进行GPU硬件加速,不过已不远了,毕竟Moonlight前几个月已实现了该功能。本节中的所有天气都包含两种模式:简单/仿真,在仿真模式下天气粒子会被更多的修饰和处理以贴近真实情况,比如旋转、缩放、扭曲、闪烁等,当然性能开销也会大许多。不过,当你感受着分布均匀、远近分明的雨水;随风散落、清新扑面的落叶;零零星星、化作烟尘的白雪;时隐时现、游荡自若的雾霭以及那强烈震撼的闪电雷击时,或许你会觉得这一切都是值得的:
另外,对于内容丰富的天气系统来说若能搭配上相应的游戏属性,效果就更好了。大家完全可以敞开思路,比如下雨时无法施展火系魔法;飘雪时冰系魔法得以加成;刮风时移动速度减慢;云雾天气影响玩家视线;雷电随机照成伤害等等,优秀的设计往往在于能把握住那些易被忽略的细节,一旦被玩家发现并从中探索出新颖的玩法,游戏趣味性及耐玩性将不言而喻。
最后,如果您还希望继续探寻天气系统场景渲染之完美极致,不妨像“天惩”那样为每个着地雨滴制作水波涟漪;为每块触地雪粒制作层峦堆叠;让一切对象因风的撩拨而起舞飞扬。没错,设计的创意就在您的手中,请不要拘束,Silverlight 2.5D RPG从此刻起由您来主宰!
本节源码下载地址:Demo3.rar
在线演示地址:http://silverfuture.cn