【本文参与征文活动】
自动加载预制组件 AutoLoad
目前大家都有过这样的开发场景,游戏主要集中在1~2个场景中,游戏的内容很多,功能各异。
面临问题
- 如果全部拼在一个场景中.
- 场景会变得很大,打开编辑和游戏加载都会变的很慢。
- 分成一个一个小的预制,在代码中按照预定规则加载上来.
- 无法在编辑器中预览整体效果
- 修改得拖上来-修改-保存-移除. 步骤繁琐
- 写一个组件绑定预制 在编辑器预览和移除
- 实际加载时也要先加载绑定预制 才能显示界面
- 需要小心运行运行和关闭界面时 没有忘记移除
组件效果
-
挂在
AutoLoad
绑定预制- 不会拖慢加载界面的速度
- 不是将预制直接复制到界面中, 而是将
预制的uuid
保存到AutoLoad的uuid
属性中.
-
编辑器中可以预览绑定预制的生成效果
- 根据uuid找到预制, 加载并创建
node
-
默认锁定
防止误触 -
不会被保存
界面修改 或node
修改,node
都不会被保存到界面上, 下次打开界面上时还是什么都没有
- 根据uuid找到预制, 加载并创建
-
修改
node
时可以保存覆盖到原预制
- 实时调整界面效果, 实时生成界面效果
- 鼠标选中
node
, 才会生效. 防止临时调整也被保存
-
AutoLoadEditor
和AutoLoad
相关又分离
-
AutoLoadEditor
继承AutoLoad
- 编辑器中选中
AutoLoad
就是使用AutoLoadEditor
- 界面实际保存时保存的是
AutoLoad
-
JudgeLoad
可以自己添加属性实现在不同平台是否使用AutoLoad
组件
- 老的预制已经完工 但是又不想在界面上显示 可以用此隐藏起来
- 最终达到快速显示界面上的内容 功能也能一个一个完整的加载上来
原理
-
绑定预制时 预制的属性_uuid 就是预制的uuid 可以据此找到该预制
-
修改
node
的 _objFlags属性
- cc.Object.Flags.DontSave 不保存
- cc.Object.Flags.LockedInEditor 编辑器锁定
- 保存修改预制到原预制
- Editor.Ipc.sendToPanel(‘scene’, ‘scene:apply-prefab’, this.child.uuid)
- 监听软重载, 避免
被
保存
- require(“electron”).ipcRenderer.on(“scene:soft-reload”, this.removeNode)
- 编辑器替换组件
- 修改cc.js中的 _idToClass 和 _nameToClass
快捷键
- alt+a 显示/隐藏左右自动加载预制
- alt+s 保存选中
node
(可以的时node
子节点也可以)
结束
- 代码简单易懂 欢迎各位自己动手改成自己喜欢的样子
- 之前使用过插件来实现这个功能, 后来发现不是我想要的. 这使得这套功能变得复杂, 不利于自己和各位依据自身情况, 动手修改.