4.1.4 扩展面板
优质
小牛编辑
130浏览
2023-12-01
在实现一个功能的同时,很可能需要界面上的 UI 交互,Cocos Creator 3D 也为扩展提供了这种能力。
在扩展里声明面板
在 package.json 里可以定义 panels 字段。
{
"name": "hello-world",
"panels": {
"default": {
"title": "world panel",
"type": "dockable",
"main": "./panels/default.js",
"icon": "./static/default.png"
},
"list": {
"title": "world list",
"type": "simple",
"main": "./panels/list.js",
"icon": "./static/list.png",
"flags": {},
"size": {}
}
}
}
这个字段是个 object,定义如下:
// panels 定义
interface PanelMap {
[name: string]: PanelInfo;
}
// 每个 panel 的定义
interface PanelInfo {
// 面板标题,支持 i18n:key 格式
title: string;
// 面板入口,一个相对路径
main: string;
// 面板图标,一个相对路径
icon?: string;
// 面板类型,默认 dockable
type?: 'dockable' | 'simple';
flags?: PanelFlags;
size?: PanelSize;
}
// panel 里的一些标记
interface PanelFlags {
// 是否允许缩放,默认 true
resizable?: boolean;
// 是否需要保存,默认 false
save?: boolean;
}
// panel 的一些尺寸限制
interface PanelSize {
width?: number;
height?: number;
'min-width'?: number;
'min-height'?: number;
}
编写面板
上面我们注册的时候定义了 panel 入口文件 panels/default.js
// 监听面板事件
exports.linsteners = {
// 面板显示的时候触发的钩子
show() {},
// 面板隐藏的时候触发的钩子
hide() {},
};
// 面板的内容
exports.template = '<div>Hello</div>';
// 面板上的样式
exports.style = 'div { color: yellow; }';
// 快捷选择器
exports.$ = {
elem: 'div',
};
// 面板启动后触发的钩子函数
exports.ready = function() {
this.$.elem.innerHTML = 'Hello World';
};
// 面板准备关闭的时候会触发的函数,return false 的话,会终止关闭面板
exports.beforeClose = function() {};
// 面板关闭后的钩子函数
exports.close = function() {};
另外我们还定义了一个 list 面板,也需要按照上面的格式编写一个 list.js 文件