插件开发-TS开发入门

本文类似于本人使用后的日记; 如有疏漏,欢迎补充

一、编辑环境
1.在FairyGUI编辑器中  插件 -> 创建新插件 ->  插件模板[发布代码(TypeScript)] -> 创建
2.使用VSCode打开插件所在目录

二、认识插件
FairyGUI-Editor 以下简称为 FGUI
打开插件主入口文件main.ts   
 
最后一行是开放给FGUI调用的内置生命周期函数
export { onPublish, onDestroy };
在插件中注册的回调必须在onDestroy中全部已确认反注册,否则刷新插件后插件运行环境会崩溃;  如下示列
let onTestPlay = new FairyGUI.EventCallback1((c) => {
console.log("test is play");
});
App.On(FairyEditor.EditorEvents.TestStart, onTestPlay) //注册FGUI运行时触发回调
function onDestroy() {
App.Off(FairyEditor.EditorEvents.TestStart, onTestPlay)
}
需要反注册的回调必须new对应的回调对象去包装,否则不能正常反注册, 详细查看
Puerts与Unity交互手册

三、扩展
1.顶部菜单栏
var menu = App.menu.GetSubMenu("tool")
menu.AddItem("display name", "name", (name) => {
console.log("call menuitem.");
});
function onDestroy() {
menu.RemoveItem("name");
}
只要获取到对应menu对象,其他的菜单也是如此添加
App.libView.contextMenu  //右键package菜单

2.检查器
查看官方案例  CustomInspectorTs
 
四、列举部分常用API
App.activeDoc //当前打开界面
App.activeDoc.inspectingTarget;  //获取当前打开界面中的选中对象(FOjbect)
FairyEditor.FObjectFactory.CreateObject  //FPackageItem 转 FObject
FairyEditor.DependencyQuery.QueryDependencies   //查找资源依赖
FairyEditor.BuilderUtil.OpenWithDefaultApp   //使用默认软件打开
App.RefreshProject(); //刷新工程
System.IO  //文件or目录操作  System开头的都是C#API
FairyEditor.ProcessUtil.Start   //启动外部程序进程
 
五、示列
1.改变当前选中文本控件的文本
let selectObj = App.activeDoc.inspectingTarget;
if(selectObj.objectType == FairyEditor.FObjectType.TEXT) {
var txtObj = selectObj as FairyEditor.FTextField;
txtObj.text = "111";
App.activeDoc.RefreshInspectors(FairyEditor.View.InspectorUpdateFlags.COMMON); //刷新Inspector面板
}

2.获取当前Package中所有Component
let packageRoot = App.activeDoc.packageItem.owner;
for (var i = 0; i < packageRoot.items.Count; ++i) {
var packageItem = packageRoot.items.get_Item(i);
if (packageItem.type == FairyEditor.FPackageItemType.COMPONENT)
console.log(packageItem.name);
}
3.刷新多语言文本
let btnReload = App.mainView.toolbar.GetChild("tbReload").asButton;
if (btnReload == null) {
console.error("no found reload button.");
return;
}
if (App.testView.running) {
btnReload.FireClick(true, true);
console.log("fire click")
}
4.FPackageItem转FObject
 if (App.activeDoc.packageItem.type == FairyEditor.FPackageItemType.COMPONENT) {
var fObj = FairyEditor.FObjectFactory.CreateObject(App.activeDoc.packageItem) as FairyEditor.FComponent;
console.log(fObj.objectType);
}
六、相关资料
App.mainView.toolbar.GetChild("tbReload")   
这个tbReload字符串是在FGUI编辑器工程找到的   其他的也类似, 对象方法什么的跟UnitySDK基本一致
比如要监听按钮点击  获取对应对象注册onClick就行
 

1 个评论

谢谢分享

要回复文章请先登录注册