简介
在此次WWDC的游戏相关视频中,苹果再一次展现了它非凡的技术整合和持续创新能力。除了继续完善已有的2D游戏框架SpritKit, 3D游戏框架SceneKit和全新的图形渲染API Metal 外,今年还新增加了GamePlayKit, ReplayKit和Model I/O三个新框架。
SpriteKit新功能
SpriteKit是苹果在2013年推出来的2D游戏开发框架,它最初的设计很多来自Cocos2D-iPhone项目,特别是API方面,几乎和Cocos2D-iPhone没有差别。得益于此,Cocos2D用户可以用很小的成本转到SpriteKit上面来。
在去年的WWDC中,苹果推出了一系列重磅级功能特性:物理集成,XCode资源打包、实时编辑器,SceneKit 3D框架,Metal图形API等,这让SpriteKit成为了开发iOS/OS X平台上的游戏的首选游戏框架。
今年,苹果继续发力,添加了3个新的节点类型,同时还完善了整个游戏开发流程和工具链支持。
SKCameraNode
此类模拟游戏里面的照相机,它可以定义游戏的可见视图,同时它也是一个node,可以对它进行缩放,旋转和平移等操作。此类是开发者继去年WWDC后最希望实现的功能,对于实现一些大地图的冒险类游戏和RPG游戏非常有帮助,可以给主角添加一个SKCameraNode子节点,然后游戏视角就会跟随主角的移动而移动了。另外,游戏里面可以支持多个SKCameraNode.
SKAudioNode
此类可以实现基于位置的音效,环境音效和沉浸性音效。可以想像一下,一颗导弹向你的主角飞过来,声音由远及近,当导弹离你的主角很近时,甚至可以听到导弹尾部喷气的声音,这种游戏音效会给玩家带来非凡的听觉感受。
SKReferenceNode
此类是SpriteKit的一个亮点,它可以实现已有组件的序列化,支持数据驱动式的游戏开发。
配合XCode,序列化的组件可以被当作游戏资源在各个不同的工程和游戏里面重用。
而且它会自动Cache,同样的文件不会被加载多次。对于一些复杂的场景和组合动作序列,当需要重用它们的时候,SKReferenceNode是个大杀器。
目前iOS 9全面支持Metal,已有的SpriteKit游戏跑在iOS 9上面,不需要做任何修改即可享受Metal带来的性能提升。如果你的设备支持Metal,那么它就会使用Metal,反之则切换到OpenGL ES.
SpriteKit 相关工具
一个好的游戏框架离不开一个好用的工具支持,游戏开发者可以通过工具快速地进行迭代式开发。苹果一直致力于完善SpriteKit的工作流,让开发者可以更快速地开发游戏,同时让玩家可以不用关心技术细节,只需要专心游戏玩法即可。
今年WWDC XCode工具支持方面主要有以下几点:
整个SpriteKit在性能,工具和易用性方面都有了较大的提升,另外,配合SceneKit,开发者可以更容易地开发3D休闲类游戏了。
SceneKit新功能
SceneKit是苹果为了让游戏开发者更方便地开发3D游戏而推出来的,它支持iOS和MacOS X。
同时,它还完美支持粒子系统,物理集成和SpriteKit。今年,苹果改进了场景编辑器,同时对Metal的支持也更加完善了。
新的场景编辑器的功能总结如下:
除了这7点以外,还有诸如compute shader, relfective cub map等功能。
Metal支持和 SKTransitions
新的SceneKit可以根据设备类型自动匹配是否使用OpenGL或Metal作为渲染后端,同时它支持SpriteKit的切换场景切换,制作SceneKit场景切换效果更容易了。
Metal 新功能及性能优化
今年WWDC游戏相关视频中,苹果用了3个视频介绍了Metal的新特性以及性能优化方法,同时SpriteKit和SceneKit在iOS 9中都是默认使用Metal作为渲染API。Metal作为苹果生态圈的高性能图形渲染API,大有可能在将来某一天取代OpenGL的趋势。
这里简单给大家介绍一下Metal的新功能,具体的细节还需要查看相关文档和视频。
MetalKit对于一些常见的应用场景提供了高效的实现,开发者可以用更少地代码来开发应用,并且开发出来的应用性能和稳定性会更高。
MetalKit提供了一个 MTKView 类,它统一处理了渲染一个Metal场景所需要的设置代码,另外,它提供了一个纹理加载器,它可以从一个图片文件中创建一个Metal纹理。最后,MetalKit完美支持Model I/O,让3D模型的处理更加简单。
Metal performance shader是一个为GPU提供数据并行算法的一个框架,目前只支持A8处理器。
它定义了一些类似操作CPU风格的API,这样可以让GPU编程变得更加简单。它提供了很多内置的并行算法,比如兰索斯重新取样(Lanczos resampling),卷积函数(比如高斯滤镜等),直方图等。
众所周知,图形应用是非常难以调试的,而Metal在设计之初就考虑了多线程,而多线程的调试也是很困难的。因此,如果没有好用的工具支持,调试Metal应用将会变得非常困难。
此次,苹果围绕Metal提供了一系列好用的工具。比如:一个可视化的帧调试器,一个资源和状态查看器,shader性能分析工具,集成的离线Metal编译器等。
读者可以根据WWDC中关于Metal性能优化的视频去了解更多详细的信息。
另外,苹果给我们定义了一些最佳实践:
Metal已经成了苹果在3D图形渲染的一张王牌,它的性能远超OpenGL,开发者应该全面拥抱它,利用它来开发出性能更好的图形应用和游戏。同时,使用Metal,也可以用更少的代码来编写图形应用,另外,它也会让你的程序会更容易维护。
GamePlayKit介绍
GamePlayKit是今年WWDC游戏开发方面最大的亮点,它提供的实体组件系统将直接改变之前以继承为主的开发游戏方式。另外,还为游戏开发提供了大量实用的算法与设计模式,iOS游戏开发从未如此简单。
实体组件系统是一种非常流行和先进的组织游戏逻辑的方式,采用它编写的游戏代码,更容易维护,更容易扩展,同时也更加灵活。
updateWithDeltaTime
方法中。 寻路算法可以让你指定一些节点生成一个双向连接图,然后可以通过简单的API调用找到任意两个点之间的最优路径。所有的有向图的基类是GKGraph,它是一个抽象类。它提供一些共用的逻辑,比如动态地添加和删除节点,连接这些节点并找到任意两个节点之间的路径。
此外,GamePlayKit还提供了两种特殊类型的图节点: GKGridGraph 和 GKObstacleGraph 。GKGridGraph非常适合2D游戏里面的路径查找。而GKObstacleGraph则可以设置一些障碍物,节点在寻路的时候,这些障碍物是无法穿越的。SKNode的边界,物理刚体和纹理都可以当作障碍物。
状态机是游戏玩法的骨架,游戏本身就是由一系列的状态机组成的。比如主角动画,AI状态,UI切换,关卡切换等,这些都可以使用状态机巧妙地解决。
GamePlayKit通过封装了 GKStateMachine 和 GKState 类,把一些共用的逻辑全部抽象出来了,开发者再也不用为每一个游戏去开发单独的状态机了。
Goal, Agent和Behavior
Agent指的是会自已移动的游戏实体,它们通过Goal和Behavior来驱动自身的逻辑。Behavior是由一系列的Goal组成的,每一个Goal都包含有相应的权重。Agent在与玩家进行游戏交互的时候,可以表现得更像人类,因为它们也会做决策。
以往只有在一些很复杂的游戏里面才会看到的AI,如今通过GamePlayKit,我们可以非常轻松地给自己的游戏也添加了。通过给游戏里面的怪物添加一些AI,能够极大地增强游戏的趣味和粘性。
MinMax AI主要用于一些回合类游戏,比如象棋,围棋,Tic-Tac-Toe等。它还能给人类玩家提供一些建议,比如告诉你下一步棋该怎么下。另外,通过计算时间的设置,AI可以定义不同的难度等级。
规则系统可以让你制作更加复杂的游戏AI,游戏世界的交互不再是“黑即是黑,白即是白”,而是以事先定义好的一定的规则去交互。游戏AI可以实现所谓的模糊逻辑,游戏怪物的活动可以根据定义好的规则系统去动态地调整和评估自己的行为。
每个游戏都有一些特别的随机数生成需求,而rand()函数只能生成一些伪随机数,并且可能跟平台实现还有一些出入。作为开发者,我们需要一个与具体平台无关的随机数生成器,另外这个随机数生成器还能产生符合一定数学分布的随机数。
这是一个非常有价值的游戏demo,里面几乎涉及了GamePlayKit里面的大部分技术,是一个值得深入学习的游戏示例。这里是 下载链接
小结
实体组件系统不是苹果的原创,但是这一次GamePlayKit巧妙地整合了已有的游戏开发框架,iOS游戏开发变得从未如此简单和有效。配合强大的Swift和Xcode支持,更加如虎添翼。
ReplayKit和 Game Center
ReplayKit可以让玩家在游戏中录制游戏视频,并且可以给这些视频添加语音评论并且通过社交网络分享出去。另外Game Center允许访客模式,并且整合了产品服务器和沙盒服务器,这样测试和开发基于Game Center的游戏就变得更加简单了。
ReplayKit只有在iOS 9才能使用,另外开发者可以定制是自动在某些游戏场景开启视频录制还是让玩家自己选择录制时机。录制完的视频还可以被编辑和预览,从此玩游戏不再孤单。
另外,访客模式是不需要取得认证即可参与游戏的,访客不会取得任何游戏成就,也不可以发布游戏得分。开启访客模式的游戏,玩家只能与其它运行iOS 9的玩家进行游戏。
Model I/O模块介绍
Model I/O是用处理3D资源和数据的框架,我们可以通过Model I/O快速地加载和导出3D资源文件。另外,它集成在Xcode里面并且和可以非常容易地与GameKit API配合.它的主要功能特性如下:
总结
从本次苹果对游戏开发所做的改进来看,休闲社交游戏仍然是其主推的游戏类型。不过有了Metal的支持,在MacOS X开发AAA游戏也是完全有可能的。另外,主流的游戏厂商Unity和Unreal都声称直接了Metal,相信以后苹果生态圈里面会出现更多高品质的游戏。
另外,随着虚拟现实和现实增强的火爆,相信在不久的将来,苹果也可能推出自家的VR设备。到时候,这些游戏开发框架和工具必将是您开发苹果VR游戏的首选。
参考链接
感谢徐川对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 )。