李明:微信小游戏技术分享

本文首发在云+社区,未经许可,不得转载。

正文

我是Layabox的合伙人李明,今天我给大家分享一下微信小游戏的应用开发。第一个话题是小游戏和小程序的不同,大家都知道微信小游戏是微信小程序的一个类目。我今天解释一下其实他们的API不太一样,比如说小程序它是走的划拨的接口,小游戏是功能性的API,图片样式跟使用跟绘制是不一样的,所以他们并不通用。所以使用引擎的话,是不能发布小游戏的,这中间有一些区别,后续我们再讲讲区别,先介绍一个概念他们是不太一样的。

这个环节我就讲一讲小游戏和H5的一个重要差异。因为Layabox是一个跨平台引擎,但同时它能够发布小游戏,今天就讲一讲H5和小游戏的差异

运行环境来看H5是可以跑在浏览器下面,可以跑在Runtime下面,也可以跑在Webview下面。而小游戏可以跑在Runtime下面,而浏览器下面小游戏是跑不了的,如果你开发了小游戏,就是用小游戏的API直接去写是不可以的。而通过引擎,这样可以在H5里面跑也可以在小游戏里面跑。

第二个本地缓存这一块,本地包来讲,小游戏这一块是有4兆的本地支持,而H5是不支持本地包,就是加载没有本地缓存,没有本地包这一块。除了本地包之外还有50兆的物理缓存,存储在设备里面,不会被清除掉,第二次打开的话就不用去加载,而H5不同的浏览器和不同的环境是有所差异。从缓存管理这一块,H5是不可以被管理的,而小游戏是提供缓存的接口。3D这一块H5是不被支持的,而小游戏是可以被支持的。还有产品支持,基本上如果你使用浏览器去访问H5是不可以被产品支持,这个很容易被退出。而使用小游戏这一块是可以支持全屏,可以不被退出。从API来讲,H5是走的L5标准的规范,小游戏是SDK包括社交能力、文件管理的能力,这都是H5不具有的,刚才说的缓存管理,H5是没有这个管理,而小程序是额外增加的功能的管理。

下面一个环节具体讲讲它的能力有哪些。

第一个,微信账号可以直接登录。用H5我还要创建账号,而微信里面就可以登陆。获取信息就不用再创建一个角色,可以直接使用头像和称呼、转发和分享,在微信里面转发给好友,转发给群里面非常有利于传播,而H5下一次找不到入口的,小游戏转发比较方便。包括小游戏的快捷方面,快捷的关闭和打开都是提供接口可以使用的,读取用户信息也非常有用。发送到桌面安卓板有,现在还没有开通,在内部语音可以使用一些语音的功能,可以通过语音的接口。H5而如果没有做授权也拿不到,语音这种游戏是做不了的,可以通过语音这个借口实现语音交互的游戏。在我支持排行这一块,小游戏是非常好的功能。挑战APP是推广使用的,就是我作为一个核心功能波快,我可以跳转APP里面帮他进行推广,这是非常好的营销、推广模式。如果你跳出来符合规则的APP是可以跳转的,这是H5没有的功能。在参数二维码也是很重要的一块,比如说我分享带一个参数,我可以分享到某一个房间里面,可以拉着好友进行PK,进行战斗,通过分享二维码实现房间的匹配。或者是我分享给一个积分,我分享十个根据我的UID十个都会有相应的积分,这带参数二维码是非常有用的。因为四兆包是小程序最大的上限,超过四兆怎么办?可以上传到腾讯云里面,也就是说4兆并不是小游戏的上限,你可以把初始的东西放在游戏里面。而小程序可以跳转小游戏,绑定同一个公众号。然后微信支付目前只有安卓版开通,IOS还没有,IOS是广告接口。而支付这一块IOS还不具备这个能力可以通过广告方式增加变现能力。

关于小游戏支持类型,其实小游戏分为三个阶段,第一个是休闲的,跟社交有关系;第二个更丰富一些,挂机游戏、碎片化的游戏;第三个是全类型的开放,从整个游戏品类的支持来讲,微信没有限制,所有的都可以开发。那么现在有一个技术上的限制,超过4m包的话是不允许创建和执行的。如果你整个项目来讲,你整个项目就超过4M了你必须砍。你的资源可以动态加载,但是你的GS没有办法做动态加载,这是对一个类型的限制,这是对丰富大小的限制。如果你的功能太复杂,这时候要砍掉一些功能。有人问我说你能不能做王者荣耀的游戏?做一些3D的游戏?都可以进行。包括我们跳一跳游戏,最开始是用国外的,但是现在用Layabox。因为three更偏向于渲染级的,现在用Layabox是更好。包括其他的一些第二批可能我们现在已经有好几款3D的游戏在提审的阶段,都是通过LAYA去写的。所以不用担心2D、3D还有什么类型,性能都不是问题,现在唯一一个就是4M的本地包不能超出。

接下来讲一个案例,这是一个全民大乐斗,这个只开放了安卓的付费,但是它的月流水已经超过千万了,在微信这一块非常好。但是IOS如果也开放收费也更加好,这也是采用Layabox引擎开发的产品。另外一个是跳一跳,更多是使用Layabox引擎尽心改版。从收费能力这一块,因为它是走的内购的收费,大乐斗是品牌的收费,这其实是小游戏的一种收费模式,其实是三种一种是内构的收费,一种是品牌广告的收费,还有就是广告接口。我这边顺便提一下,前几天刚到一个广告的政策。

这是3D的正在提交的两款游戏一个是3DSLNG类型的就是《魔法与王权》,另外一种是枪战射击的《突击精英》,其实3D游戏准备上小游戏的游戏蛮多的。刚才接着上面的话题,分成比例安卓是4:6,开发者是6,腾讯这边是4,IOS还没有开,它的政策是多少还未知,因为IOS自己有20%还是30%的扣款。广告来讲10万以下是五五分,10万以上的话是2.3,三七分。这是内购和广告的比率。

在微信小游戏的带动下,2018年非常关注小游戏这一块,除了微信现在其实手机QQ也在做小游戏的事件。一方面迷你游戏现在手机QQ玩一玩,其他部门我就不讲了。手机硬核联盟的快应用,包括Facebook的,它已经很成熟了,包括日本的line等等,很多平台都在发现小游戏这一块。如果我们一个一个平台去开发,那需要开发很多套,因为每一个接口都不一样,那怎么办?

Layabox它提供一站式解决方案,使用引擎开发的产品可以同时使用微信小游戏,QQ玩一玩各种平台都做了动态的适配。引擎这一块我简单介绍一下,首先我们支持三种开发语言的NSN、GS和TYPESCRIPT的。如果你有页游开发经验的比较熟悉的,我们建议还是使用AS,因为工具链还是比较友好的。如果不是这样的话,全新的使用TS语言进行开发,包括维护成本、开发成本都会比较低。而GS来讲上手比较容易,但是后期维护和开发难度还是挺高的,尤其在调试和交错这一块。所以我们一般推荐你熟悉AS就用AS,否则用TS更友好一些。对于游戏我们推荐TS,小游戏其实也无所谓了,什么都可以。

另外我们支持2D、3D、VR和AR的开发,其实就是做了一个分屏,我们很早就支持了,VR其实也是可以开发的,AR这一块取决于浏览器的一个能力。如果说你的浏览器里面就支持,首先你的一个摄象头要支持,你的位置也要支持,这些你都需要使用。现在来讲最友好的是腾讯的QQ浏览器,它的AR支持非常好,这样的话你开发AR在腾讯QQ浏览器可能推出这样一个平台。所以AR这一块如果浏览器支持的话是可以的,可以作为一个很好的体验。

拥有成熟的工具链这一块,除了引擎,包括引擎的功能,其实它的渲染还不错,但是它的功能还不够,这就限制了大家去使用,门槛就变得很高了。如果你没有很好的工具,没有好的工具流还是很高的。Layabox除了引擎的基础大之外,它的工具流也非常的完善,它提供可视化的UI编辑功能,动画功能等等全都提供,包括我们马上推出的2.0也有自定义的东西,你可以创建自己的组建去使用。另外除了我们自己本身的ID的功能之外,还支持优秀的第三方的工具链。UNITY其实是可以实现很多,3D这块LAYA其实是不提供前端的工具的,是需要使用UNITY的环境,可是在UNITY去开发、编辑。这是一个整个支持成熟的工具链,除了开发来讲引擎非常成熟。

另外3D这块是比较成熟的,不只是中国,其实在国际商来讲,能真正拥有3D的一个商业化的大型游戏案例,目前就我所知就只有Layabox,大家也可以去找一些,如果有的话也可以告诉我。所以这一块也是非常重要的,未来你开发3D游戏,这一块有成熟案例能够证明你的成熟度。但是我们现在知名的场商都在有,基本上知名的厂商我们都有,引擎还是相对比较稳定的。

已经介绍完了,介绍一下今天观众比较关心的是引擎的一次开发多版本发布。使用Laya引擎以外,还可以打包NativeAPP,你比如说打一个空壳包,打一个范包,还可以打一个全包,同时还可以发布主题微信小游戏,除了这个之外其他的平台包括腾讯的QQ玩一玩,包括未来的快游戏等等各种的只要是其他的推出之后,我们Layabox都会做一个很好的适配。我这里解决一个问题就是小游戏和APP物可以进行互跳。

再下面开始去讲一下跟技术,跟发布流程有一些关系了,下面跟发布有一些关系。首先你发布微信小游戏你要准备一个环境,这个环境都有哪些?首先我们推荐使用Laya引擎的开发工具,像UI的编辑,包括发布功能的适配都在我们的环境里面去实现的。那么这样可以拍照留一个地址,就是找到ID下载我们下载最新版就可以,这是你准备好引擎的开发工具;第二个,你要下载一个工具,开发者工具里头,所以这一个可以打开微信开发者账号里头文档,找到开发者工具去下载。你还要准备一个什么事情?准备企业开发者账号,你个人可不可以?但是个人和企业是有区别的,个人开发者如果注册完之后,你是开不了內购的,你未来也只是做做广告或者免费休闲的一些游戏,开一些道具支付,这个个人开发者是开不了的,只能是企业。因为企业要求资质要有版号,因为版号周期非常长,有的两三个月,有的非常长。这个其实现在来讲版号完全不需要把版号资质办完。你有回执,有著作权就可以直接上传,所以大家不用担心是不是版号办下来之后才可以。

这是一个总的流程,首先你开发引擎的话要在IDE里面创建小游戏项目,然后在IDE内进行小游戏开发,在IDE内发布小游戏项目,在小游戏的开发工具内,你还压去导入或者创建项目,这样你才能在真机进行调试和上线的发布。所以大概就是这样一个流程。

现在我看详细去介绍每一个流程,首先第一个打开我们的工具之后,你首先去创建一个新的项目,这个不是很清楚,你记住选择下面两个,第一个是微信小游戏的2D示例,第二个是微信小游戏的3D示例。因为你只有选择了微信小游戏的示例项目我们才创建一个工程,所以我们建议使用这两个,最多下面这两个创建示例项目,那么我们的引擎就帮你做好了适配,做好了小游戏项目的创建。在后面选好了之后,名称自己随便写了。语言这一块,AS、TS、GS你适合哪一种就选。最后是引擎版本,因为从刚开始适配到现在适配的方案,目前来说版本会好一些,下一个版本可能会更好一些,现在我们推荐新的版本,会有一些新的机制,比如说白名单机制我后面会讲。

这个在实际开发过程轴有一个很重要的工具就是4M的本地包,4M的本地包给大家干什么呢?它很小能干什么?就是放JS的,你超过了4M之外的JS是不能被加载的,所以你的JS必须放在4M本地包之内,如果你的包可能一两M,可以放一些其他的。因为更多的时候我们可以放在50M的缓存包里面,它的作用跟本地包差别不大。就是放一些项目JS,放一些最基础的背景,这个可以放这个,所以4M包不要放太多东西。

超过4M包怎么进行资源的加载?因为你要从远程、远端去加载资源,这时候我们提供一个接口,我们的接口是BASEPATH的接口。如果我们再使用BASEPATH之后,如果你要把它加入到白名单,也是从动态里头去加载,当使用这个方法之外,后面所有的资源都会从网络去加载,这时候怎么办?我刚才说了INS我是本地包,我不希望再从网络加载,这时候怎么样。这时候使用加载的白名单,我不会从远程加载,只要在白名单里面我就从这里面去找。那在这个列表里面,这个上一版本是这个目录,你放在这个目录下面我们就认为是本地包。如果在这个版本里头,你不手动放进去我们是不认的,所以要通过这种方式的控制,这种方式控制会更灵活,这种方式可以配置。我想放在这个目录下,这个目录可以读本地。比如说这个文件,这个PNG的文件,或者是2G的文件,我可能在好几个不同的目录下,这块来讲比较复杂了,这种方式比较灵活,我在某一个目录下我就放在本地。

这样的话我们通过白名单的机制,通过BASEPATH的一个方法,这样一个属性可以实现本地包、远程包自由去切换,自由去使用,我就可以知道哪些是本地包,哪些是网络包。这样的话用4M本地包加上网络包,实现一个可以做任何一个大型游戏的一个方式。除了4M本地包之后,50M的缓存是非常重要的一个环节,就是你使用缓存能达到什么样的目的?类似于原生APP的体验,首次来讲可能还会加载了,当你第二次的话,因为引擎在适配库里面我们做一个检测,如果本地有就使用本地,这样节省用户的流量资源,第二加载变快了。这样的话无论从流量也好还是加载时长也好非常非常好的。这个我们怎么使用好50M的缓存非常重要,我们会有两种方案,使用默认自动缓存的方案,另外一种是手动缓存的方案。我们只缓存图片和声音文件,比如说你有一些JS和其他的文件来讲,使用手动的方法去下载可以下载我指定的文件。如果默认缓存的话,只缓存图片和声音文件。这样的话,声音文件自动缓存怎么缓存?缓存到50M之后,也就是说我的游戏超过50M怎么办?那就删掉,就是早期缓存直接删掉,一次删多少?一次删5M,在这里默认。你通过这个属性也可以更改,我想一次删1M或者10M,一旦达到50M之后,自动缓存删5M,再写入进去。如果不够再删再写,这是自动缓存的一种方式。

刚才说了,我想手动管理怎么办?因为手动管理更加灵活,相比一个打游戏,好几百M总包的资源,我删掉前面的,前面可能我还要再用,前面可能更灵活。手动首先要关闭它,首先我可以关闭自动缓存,你超过50M写不进去了,你必须要有很好的管理,如果你管理不当的话,缓存写不进去,剩下就跟远程加载,很多本地就用不上了。如果你关闭之后就要自己进行整个缓存机制的策略,否则会起到不好的效果。最后管理方法属性,当false是下载缓存到本地,然后第二个是最小缓存的大小,第三个是Remove删存指定的缓存文件。

怎么使用好50M的文件,其实它的第二次加载非常好,加载好了速度会非常快。

除了4M包和缓存使用之外,要注意一个当内存优化这一块,因为游戏上线是有一个测试标准的,你达不到这个标准,你游戏提交都不过可能会被打回来。有一个重要的标准是内存的标准,我不细讲了。内存的标准首先分为三档,我只讲最低一档,最低一档满足了三档无所谓了。类似于红米note1S、苹果5S的配置,我建议控制在200M左右,上限不超过400,这个上线不超过400是腾讯这边的测试标准,如果超过400的话直接就不让过了,所以这个400M是控制住的。

另外关于内存优化这一块,对象内存的释放和资源的释放,时间关系我就稍微提一下。因为官网上有文档,甚至精灵优化,这些我们官网都有,欢迎登录到官网详细看一看。

另外发布,发布这一块,如果开发完了之后我们有一个发布的按钮,点这个按钮就出来发布的页面,选择默认是微信小游戏发布的流程,如果你不敢压缩的话就发布的就这么简单。一键就把H5的项目发布到小游戏的项目,点这个发布。

为什么一键发布,我也讲一下,因为首先就是说无论是微信小游戏还是QQ游戏来讲,提供的都是渲染级的接口。引擎对接是通过渲染去对接到API,就是各种接口完全用不上,我只要它的引擎借口就可以把所有的绘制出来,所有的每一个画面都是画出来的。一秒钟是60桢的话,就是60次,这是一个绘制的原理。

到处小游戏的项目,刚才说了你没有创建示例项目,那么这时候你去导入那个包的话是不允许的,这可能看不太清楚,如果你的项目不是空项目又没有微信小程序的工程文件,那么它是不允许你导入的。要么你建一个空项目,要么创建一个工程项目。这个时候如果你创建工程的话直接导入进去了很方便,如果不是你还要做很多的适配。比如说mini之前要导入一个数据库,他们的写法也不一样。所以说我们建议采用示例项目,示例项目都做好了,如果不是中间还是比较烦琐的。如果老项目,我们官方也有教程,这样的话如果示例项目直接导入。导入之后成功的画面就是这个,你可以看到这是示例的效果。这里头的效果跟ID里头的效果是完全一样的,如果不一样可能适配这块出问题了。因为小游戏调试的方式基本上和H5调试是一样的,有可能是真机不一样,真机就是探针模式。这时候我们就需要大家看一下真机的模式,包括有一些预览的功能。真机这一块目前调试不是太方便,不太方便但是可以打日志可以调试。但目前来讲确实不是很方便,问题也不会很大,我们基本上在CHROME没有问题的情况下,我们会做大量的工作,在真机也不会出现什么问题。

另外就是发布的一个流程,你开发了之后,真机调整怎么上线。第一步我在游戏开发者工具里头找到一个上传,上传到哪?上传到微信开发者里面去了。再登录微信开发者平台在管理页面里找到你刚才找到的提交版本,然后就有下一步下一步,提交资质就可以了。提交好之后就可以等待它的审核通过,审核通过之后就可以发布了,这么几个流程就可以完成发布。

这是简单的一个预告,这是我们正在做还没有推出来,我们要跟腾讯云去优化小游戏发布的流程。原来小游戏很麻烦的一个地方,我除了4M包之外,我要打开服务器,要上传等等,要做大量的工作。但是我们跟腾讯这一块集成一键上传之后,除了4M包之外,剩下我们在IDE也可以进行上传。所以这个就是说优化整个模式,甚至我们还提供了跟腾讯云账号进行绑定,laya你绑定之后可以登录腾讯云,避免二此登录,流程也非常好,提供快速购买的服务。

另外我们跟腾讯联合推出小游戏的框架,除了你前面做的东西服务端还要做很多东西。大家对服务器不太熟对这个还是很麻烦的,你只需要写一写前面的代码,后面的功能前面的功能基本上都包括在里面了比如说里面的注册登录、房间配对我都给你提供接口,你直接使用就好了,包括排行、存储、数据同步、渲染同步。如果做真同步的方案怎么办?这些全部都提供了。所以我们在整个框架来讲,你只要在前端里使用接口做好交互就可以了。我们未来来讲在购买服务器的时候,你勾选了服务就可以自动配置服务了。 一个是小游戏的上传,另外一个是小游戏服务器的架构,这是未来都可以推出来的。

QA:

Q:上限40m的话,Layabox本身是占多少?

A:laya来讲我们的核心包是500K,如果你要加上3D的话,3D占的比较大,可能在1M左右。

Q:你好,用Layabox的话做后台服务器,如果实现前瞻的话可以接吗?

A:Layabox主要是前站的引擎,主要开发各种的高级的API,比如说头像、动画是前端的功能,后端主要提供一个框架。

Q:导入还是得用开发者工具,就是前端4M导入。

A:4M包的话,你只要在那一块加载一个远程的设置,你把路径写进去就可以了,你把基础的放在4M以内。

Q:我想问一下,后期的话Layabox开发的小游戏它的后期的发布。

A:你说小游戏腾讯云的支持。

Q:就是小游戏后续上线发布。

A:如果说采用我们未来集成的方式的话,它会有一些优惠的政策,比如说前期几个月会免费给大家使用。

Q:请教一下李总,Layabox和Layaair对海外有没有授权?引擎授权。

A:我们1.0是属于免费开源的,也能看到代码,所以说它使用是免费的。对于海外来讲,我多说一句,我们跟facebook也做了一个战略的合作。

李明:微信小游戏技术分享.pptx

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang语言-写一个检测 tcp udp 状态的包

因为要跟着 dockerpool 的基友写 Docker 管理的程序,所以今年的目标是学习 go 语言。 看完 go 的入门教程,高深的代码还看不懂,所以决定先...

3785
来自专栏BestSDK

互联网人必备:深刻理解什么是API接口

API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以...

3206
来自专栏美丽应用

小折腾:修改蓝牙耳机按键映射

2443
来自专栏黑白安全

上传恶意文件时无意泄露两个0-day,被研究人员抓个正着

一个未知的黑客组织在向公开恶意软件扫描引擎上传一个用于攻击的 PDF 文件时,无意间泄露了两个 0-day 漏洞。漏洞被研究人员捕获,并及时上报给厂商修复。

953
来自专栏Spark学习技巧

spark源码导读一

1,业务需求,现有框架满足不了项目需要,需要对源码的一部分进行修改或者叫做二次开发,需要阅读部分源码。那么这个针对性就很强了,修改不符合需求的部分。

1251
来自专栏FreeBuf

物联网究竟有多不安全?2016年IOT设备漏洞情况汇总

近年来,随着智能手机、可穿戴设备、活动追踪器、无线网络、智能汽车、智能家居等终端设备和网络设备的迅速发展和普及利用,针对IOT设备的网络攻击事件比例呈上升趋势,...

4187
来自专栏企鹅号快讯

想开发微信小游戏,先看看腾讯是如何制定规则的

关键时刻,第一时间送达! ? 作者 | 凌华彬、王哲 责编 | 徐威龙 一、前言 在第一篇文章《微信小游戏开发上手》中,我们给大家介绍了上手微信小游戏开发所需要...

1.1K5
来自专栏haifeiWu与他朋友们的专栏

个人博客折腾记

个人博客,也折腾了3年多了吧,不说已经特别稳定了,但起码也做成了自己满意样子,后续还需要继续调整。虽然现在的博客看似简单,并且用的模板,但在博客的这条路上也花了...

2661
来自专栏FreeBuf

谷歌可远程更改安卓设备密码,影响74%设备

根据纽约地区检察官办公室的一份报告所述,只要有法院命令,谷歌能够非常容易地远程重置旧版本Android系统的密码,调查人员可以轻易地查看设备上的内容。 这份报告...

2037
来自专栏Seebug漏洞平台

被忽视的攻击面:Python package 钓鱼

1 概 述 2017年6月2日,Paper 收录了一篇 fate0 的《Package 钓鱼》 文章,该文章讲述了作者在 PyPI 上投放恶意的 Pyth...

3285

扫码关注云+社区

领取腾讯云代金券