前言
看到还有很多新手使用 oops,包括我当前公司的项目(老项目)也在使用 oops,那么给其他不了解 oops 的人避坑。
以下内容均使用最新版本 oops 测试
UI
UI 配置设计不合理
定义一个 UI 模块,你需要添加一个枚举,然后再在另一个对象中添加配置
问题:
-
没有静态错误检查:添加了 UIID 没添加 UIConfigData 时不会报错,只有运行时报错

-
不必要的枚举:已经可以使用对象键作为 UI 模块类型,为什么还要添加枚举?(改进如下)
-
UI 配置和UI 的 class 没有直接联系,只能规定命名或者先找到配置再打开预制体查看挂载的 class。意味着纯脚本编程很困难
初始化参数没有类型安全
正常的类型安全

不能重复创建相同的 UI
是的,如果你想要创建子弹这些重复 UI,你不能使用 oops 的 UI 管理 
![]()
公开的 Layer 类型不能使用
框架基础功能 BUG,当 UI 配置的 layer 为 LayerType.Game 时不能正常打开
![]()
接口设计错误
打开 UI 竟然有 open 和 openAsync 两个接口,而打开 UI 是异步的行为,open 接口只应该是异步函数
场景限制
oops 内的所有模块都是依靠父节点来控制各种类型的显示层级。
这意味着你不能创建多场景,像场景的 SkyBox,Fog,Shadow 这些配置都需要你写额外的代码来动态控制。
事件
event 对象为私有属性
UI 的父类为 GameComponent,其中 event 为私有属性用户只能通过 on、off、dispatchEvent 接口访问。
阉割的 event
想要使用 once 只能用 oops.message.once,而 on、once、off 都不支持使用类型取消监听。也没有 targetOff
如果你写的 event 不会比 cocos 的 EventTarget 更好,为什么要自己实现?
没有类型安全检测
即使没有 xxx 这个事件类型你也可以监听/派发且不报错

音频
oops 的音效只实现了一些最基础的功能。
功能缺失
-
不能单独控制音频的音量、进度、循环、是/否重叠播放(最基础的需求)
-
音乐分组只有音乐、音效且不支持动态扩展(例如我想单独控制场景声、人声分类的音频是不行的)
-
没有音频最大数量(AudioSource.maxAudioChannel)的安全处理
如果播放数量超过 maxAudioChannel 值, cocos 会默认停止之前播放的音频。而最好的处理方式是中断当前想要播放的音频而不是之前的。
存储
没有类型安全
示例如下
存储键安全
存储值类型安全
而 oops 都没有
资源管理
接口设计错误
同 UI,也设计了 load 和 loadAsync 接口
旧版本的的资源管理
直接释放资源及依赖资源,如果此时另一个 UI 共用了当前关闭 UI 的资源,此时直接报错
oops 的新版本改为了使用 decRef,这是正常的做法,但是在 cocos 的3.x早期版本中存在释放资源加载释放的资源获取的资源是被销毁后的。所以想要安全的释放资源 assetManager.releaseAsset 是最好的选择(需要自行控制释放时机)
没有释放动态合图的资源
如果你开启了动态合图,那么合图的资源由 DynamicAtlasManager 控制,它也需要被释放
没有自动资源引用管理
意味着你需要自己 addRef, decRef
新手引导
oops 对其功能收费,而这是最基础的游戏功能之一。其他人如有需要可以参考 MK 中的新手引导管理器,开源/免费,且保证比其他任何的引导框架更好,欢迎挑战
结尾
还有更多内容限于时间问题不再展开(例如其中的ECS、 MVVM)。我对 oops 的评价就是看着很完善的新手玩具…
有问题欢迎反驳










而我的 MKFramework 是自动化管理,不需要自己魔改

