LayaAir3-IDE插件开发笔记

文章目录

能力概述

  • 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的类会报错。
  • 建议目录隔离(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 - 在任意类型资源被导入后调用

国际化支持

添加新的资源类型

自定义的资源缩略图

自定义资源的预览面板

自定义资源的导入导出

自定义资源配置界面

场景钩子 [*]

场景钩子用于实现对场景新建 对象、载入保存 等特定流程里插入自定义的逻辑。

相关推荐
瑶光守护者3 小时前
【学习笔记】5G RedCap:智能回落5G NR驻留的接入策略
笔记·学习·5g
你想知道什么?3 小时前
Python基础篇(上) 学习笔记
笔记·python·学习
xian_wwq3 小时前
【学习笔记】可信数据空间的工程实现
笔记·学习
浩瀚地学4 小时前
【Arcpy】入门学习笔记(五)-矢量数据
经验分享·笔记·python·arcgis·arcpy
Li.CQ4 小时前
SQL学习笔记
笔记·sql·学习
云霄星乖乖的果冻4 小时前
01引言——李沐《动手学深度学习》个人笔记
人工智能·笔记·深度学习
AI视觉网奇4 小时前
移动端数字人 Ultralight-Digital-Human 算法笔记
笔记·计算机视觉
雍凉明月夜4 小时前
c++ 精学笔记记录Ⅱ
开发语言·c++·笔记·vscode
路弥行至5 小时前
FreeRTOS任务管理详解中: FreeRTOS任务创建与删除实战教程(动态方法)
c语言·开发语言·笔记·stm32·操作系统·freertos·入门教程
北岛寒沫5 小时前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第四课 税收和补贴)
笔记