简介
在使用unity,cocos,laya2.0,会发现这些编辑器,打开的时候第一眼看到的不是代码,而是一个场景!随便拖拽资源上的几张图片上去,再点击下播放按钮,浏览器就显示出来了,然而我并没有写任何代码!那这种场景单元化,有什么好处呢?
所见即所得
在UI编辑器,我们想要看到一个场景是什么样子,直接点击对应的文件即可,不需要跑一遍游戏
每个场景可以作为一个单元,运行起来(游戏不一定要从首页开始跑了,当然发布的时候还是要以首页为起始点),这样我们调试UI的时候造成了极大的方便
零基础入门,不需要一堆new,addChild劝退,一个新手也能搞一个静态的页面
组件单元
一些公共的,或者动画复杂的,我们可以拆分成了组件单元,约定一个动画播放名字,我们直接就可以通过代码调用了
通过时间轴动画,直接序列化动画,我们再也不需要在代码上tween.get.to+200ms+wait等代码
甚至后续还可以设计参与改动,设计再也不需要用如dragonbones用时间轴做一遍演示动画,然后让我们重新看着视频模拟一遍了,可以直接在编辑上改动并且预览
同时组件单元化从场景中分离了出来,设计可能只需要关心如一个钻石后面的光闪烁的文件,直接改动的是一个组件,不会动用场景的UI文件
数据配置
cocos通过一些特殊的JsDoc,可以把场景的数据,在UI编辑上展示,还能起一个好容易理解的别名
如产品在编辑器看到的就是一个属性列表,如游戏难度(下拉框,简单,中等,困难),如游戏总时长,棋盘的边距,类似admin配置中心,改动了,还能立马看到效果!
逻辑耦合
逻辑通过挂件的形式进入场景,类似插件的形式注入,如一个按钮需要点击时候,放大缩小的动画,直接拖拽一个逻辑通用的脚本上去告诉这个按钮拥有这种功能即可(如开始游戏的按钮,音量按钮,分享按钮)
不过实际使用的时候,还是免不了逻辑组件之间会有耦合,这个时候可以通过组件的owner来访问另外一个组件
如消消乐游戏的提示模块需要调用游戏的寻找解的模块来使用
生命周期
通常来说,组件的owner销毁了,各组件也需要跟着销毁,因此组件通常会带上生命周期的钩子,如游戏动效模块的循环的缓动,提示模块的定时器,等等,均可放到钩子中,随着owner的生命周期一同管理
组件拆开之后更利于团队开发,每个人各司其职,同时会减少不少的代码冲突