# AutoLoad **Repository Path**: kylekyle/AutoLoad ## Basic Information - **Project Name**: AutoLoad - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2020-11-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 自动加载预制组件 `AutoLoad` 目前大家都有过这样的开发场景,游戏主要集中在1~2个场景中,游戏的内容很多,功能各异。 #### 面临问题 1. 如果全部拼在一个场景中. * 场景会变得很大,打开编辑和游戏加载都会变的很慢。 2. 分成一个一个小的预制,在代码中按照预定规则加载上来. * 无法在编辑器中预览整体效果 * 修改得拖上来-修改-保存-移除. 步骤繁琐 3. 写一个组件绑定预制 在编辑器预览和移除 * 实际加载时也要先加载绑定预制 才能显示界面 * 需要小心运行运行和关闭界面时 没有忘记移除 #### 组件效果 1. 挂在`AutoLoad`绑定预制 * 不会拖慢加载界面的速度 * 不是将预制直接复制到界面中, 而是将`预制的uuid`保存到`AutoLoad的uuid`属性中. 2. 编辑器中可以预览绑定预制的生成效果 * 根据uuid找到预制, 加载并创建`node` * `默认锁定` 防止误触 * `不会被保存` 界面修改 或 `node`修改, `node`都不会被保存到界面上, 下次打开界面上时还是什么都没有 ^_^ 3. 修改`node`时可以保存覆盖到原预制 * 实时调整界面效果, 实时生成界面效果 * 鼠标选中`node`, 才会生效. 防止临时调整也被保存 4. `AutoLoadEditor`和`AutoLoad` 相关又分离 * `AutoLoadEditor`继承`AutoLoad` * 编辑器中选中`AutoLoad`就是使用`AutoLoadEditor` * 界面实际保存时保存的是`AutoLoad` 5. `JudgeLoad`可以自己添加属性实现在不同平台是否使用 `AutoLoad`组件 * 老的预制已经完工 但是又不想在界面上显示 可以用此隐藏起来 6. 最终达到快速显示界面上的内容 功能也能一个一个完整的加载上来 #### 原理 1. 绑定预制时 预制的属性_uuid 就是预制的uuid 可以据此找到该预制 2. 修改`node`的 _objFlags属性 * cc.Object.Flags.DontSave 不保存 * cc.Object.Flags.LockedInEditor 编辑器锁定 3. 保存修改预制到原预制 * Editor.Ipc.sendToPanel('scene', 'scene:apply-prefab', this.child.uuid) 4. 监听软重载, 避免 `被` 保存 * require("electron").ipcRenderer.on("scene:soft-reload", this.removeNode) 5. 编辑器替换组件 * 修改cc.js中的 _idToClass 和 _nameToClass #### 快捷键: 1. alt+a 显示/隐藏左右自动加载预制 2. alt+s 保存选中`node` (可以的时`node`子节点也可以) #### 结束 1. 代码简单易懂 欢迎各位自己动手改成自己喜欢的样子 2. 之前使用过插件来实现这个功能, 后来发现不是我想要的. 这使得这套功能变得复杂, 不利于自己和各位依据自身情况, 动手修改. #### 项目地址 https://gitee.com/landream/AutoLoad