文章目录
- 能力概述
- 插件运行环境
- [制作编辑器UI [*]](#制作编辑器UI [*])
- [程序化生成界面 [*]](#程序化生成界面 [*])
- [自定义Inspector字段编辑界面 [*]](#自定义Inspector字段编辑界面 [*])
- [自定义面板 [*]](#自定义面板 [*])
- [使用对话框 [*]](#使用对话框 [*])
- [扩展内置菜单 [*]](#扩展内置菜单 [*])
- [创建菜单 [*]](#创建菜单 [*])
- 在场景视图中绘制形状以及交互式手柄
- 自定义配置
- 扩展编辑器配置界面
- [扩展构建流程 [*]](#扩展构建流程 [*])
- [自定义发布目标平台 [*]](#自定义发布目标平台 [*])
- [资源导入预处理和后处理 [*]](#资源导入预处理和后处理 [*])
- 国际化支持
- 添加新的资源类型
- 自定义的资源缩略图
- 自定义资源的预览面板
- 自定义资源的导入导出
- 自定义资源配置界面
- [场景钩子 [*]](#场景钩子 [*])
能力概述
- IDE是用Electron开发的,本质是对chrome浏览器的封装
- 三剑客单页面应用,提供封装了的UI框架
- 与编辑器插件开发相关的:editor.d.ts, editor-ui.d.ts, editor-env.d.ts
- editor.d.ts: UI进程的API - 常用的是全局对象Editor和IEditor命名空间下的类和接口
- editor-env.d.ts: 场景进程的API - 常用的是全局对象EditorEnv和IEditorEnv命名空间下的类和接口
- editor-ui.d.ts: 编辑器UI库 - 使用IEditorUI命名空间下的类和接口。
- 有大量实用的工具函数:UUID生成,加密解密,ZIP压缩/解压,文件/目录拷贝/移动,HTTP请求,上传/下载等等
- 可以引入node.js内置模块及IDE内置的cjs模块:

插件运行环境
- 编辑器是多进程体系,主要有三个进程:Main进程/UI进程/Scene进程
- 插件只能运行在UI进程和Scene进程
- UI进程没有载入引擎库,也就是没有LayaAir引擎环境
- Scene进程有LayaAir引擎环境
- UI和Scene进程只能是通过异步通讯API通信
- 插件脚本也可能在预览(含编辑器内预览和外部浏览器预览)中运行,它与Scene进程的区别是,预览进程中没有node环境。
- 总结------要自行有意识根据环境正确使用模块
| node等本地模块 | laya引擎 | |
|---|---|---|
| UI进程 | √ | × |
| Scene进程 | √ | √ |
| 预览进程 | × | √ |
Laya.Script中使用本地能力【预览进程->使用node.js】

UI进程脚本和Scene进程脚本通讯的方式【UI进程<->使用laya引擎】
-
设置节点/组件属性后,场景里的节点/组件会自动刷新,无需代码。

-
调用节点/组件的一个方法,并返回值。

-
场景进程定义的函数,ui进程执行

-
场景进程向UI进程发送消息 - [laya->UI进程]

预览运行进程和UI进程的通讯方式
-
预览运行进程调用UI进程的脚本

-
UI进程调用预览运行进程的脚本

总结-编辑器实现脚本隔离的机制
- 编辑器实现脚本隔离的机制是将脚本编译成三个js,这个机制是自动的。
- bundle.js:包含可以在预览环境,也就是在浏览器可以运行的版本
- bundle.editor.js:UI进程运行的脚本
- bundle.scene.js:Scene进程的脚本
- 机制的运作方式:
- @Laya.regClass
- Debug版本:所有含有@Laya.regClass装饰器的脚本会编译进bundle.js和bundle.scene.js
- release版本:bundle.js里,只会包含有被场景引用的脚本。bundle.scene.js不会出现在发布版本中。
- @IEditorEnv.regClass
- 所有含有@IEditorEnv.regClass装饰器的脚本会编译进bundle.scene.js。
- 这个js只在编辑器内部运行,可以放心使用node能力。
- @IEditor.xxx
- 所有含有@IEditor.xxx装饰器的脚本会编译进bundle.editor.js。
- 这个js只运行在UI进程,可以放心使用node能力,但如果引用Laya的类会报错。
- @Laya.regClass
- 建议目录隔离(editor_ui:UI进程脚本;editor_scene:Scene进程脚本;其它:游戏/预览脚本)
制作编辑器UI [*]
- resources目录在发布时会拷贝到发布目录里,但editorResources则永远不会。
- 一个资源位于"/MaDaHa/v1/editoResources/a/b.png",在引用资源时可以直接填写"editorResources/a/b.png",而不用理会前面的"MaDaHa/v1/"。
程序化生成界面 [*]
自定义Inspector字段编辑界面 [*]
自定义面板 [*]
使用对话框 [*]

扩展内置菜单 [*]

创建菜单 [*]

在场景视图中绘制形状以及交互式手柄
自定义配置
扩展编辑器配置界面
扩展构建流程 [*]
- 自定义菜单

- IBuildPlugin:提供构建流程的钩子函数(IEditorEnv.regBuildPlugin装饰器注册插件类)
-
onSetup - 可改配置(可以在这个事件里修改config和platformConfig等配置。
-
onStart - 可以在这个事件里在初始化目标目录的结构,或者进行必要的检查和安装等。
-
onCollectAssets
-
onBeforeExportAssets - 可以修改outPath自定义资源的输出位置
-
onExportScripts - 需要对生成的代码进行修改,可以在这个事件里处理
-
onAfterExportAssets - 如果开发者需要添加自己的文件,或者及进行压缩等操作,可以在这个事件里处理
-
onCreateManifest - 构建完成(可以在这个事件生成一些清单文件,配置文件等。
-
onCreatePackage - 如果有原生的构建流程,在这里处理。
-
onEnd - 构建任务完成事件。
-
插件常用:
-
task.logger接口记录日志
-
IEditorEnv.utils.renderTemplateFile渲染模版文件,使用的是mustache库
-
task.mergeConfigFile合并配置文件。即,如果在内置模版目录和项目模版目录(build-templates)有相同路径和名字的json格式的配置文件,通过此方法可以将他们合并
-
IEditorEnv.utils.intallCli安装公共的一些cli包,它将安装在library/cli-package下。
-
IEditorEnv.utils.exeCli执行npm/npx或者使用installCli安装的cli

-
IEditorEnv.utils.exec执行任意本地命令
-
IEditorEnv.utils.downloadFile下载文件
-
IEditorEnv.utils.ZipFileR解压文件。
-
在构建插件中可以通过Settings机制访问这下面构造的参数

-
可以扩展构建选项面板,添加一些自定义的参数

-
-
总结:
- 那么regBuildPlugin的第一个参数可以传递"*"
- 标识:wxgame、android、web、...
- regBuildPlugin的第二个参数可以传递一个优先级的数值,优先级越大,构建时这个插件会被更早的调用
-
- IBuildTask:钩子函数中能操作的对象
自定义发布目标平台 [*]
可以通过插件给IDE新增一个发布目标平台,详见官网
资源导入预处理和后处理 [*]
- IAssetProcessor
- onPreprocessImage - 在图片资源被导入前调用
- onPreprocessAsset - 在任意类型资源被导入前调用
- onPostprocessImage - 在图片资源被导入后调用
- onPostprocessAsset - 在任意类型资源被导入后调用

国际化支持
添加新的资源类型
自定义的资源缩略图
自定义资源的预览面板
自定义资源的导入导出
自定义资源配置界面
场景钩子 [*]
场景钩子用于实现对场景新建 对象、载入 、保存 等特定流程里插入自定义的逻辑。
