当前位置: 首页 > news >正文

用织梦建设网站永久一级传奇网站

用织梦建设网站,永久一级传奇网站,山东住房和城乡建设厅网站一体化平台,微信微网站建设本文涉及到的软件有:FairyGUI,VSCode 代码环境涉及到了:Lua VSCode插件:EmmyLua 在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能…

本文涉及到的软件有:FairyGUI,VSCode

代码环境涉及到了:Lua

VSCode插件:EmmyLua

在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能实现的,插件中我使用的是lua环境模板。导入编辑器的LuaAPI,文件可以在FairyGUI-Editor源码的插件目录中找到。接下来将通过功能来说明对应的API作用。

插件的位置

 如果找不到插件面板,可以通过“视图→插件”或“工具→插件”添加插件面板。

1、打开插件目录,插件目录是在“项目目录/plugins"文件夹下,每个插件对应一个子文件夹。

2、创建新插件

3、刷新插件列表

一个新插件的诞生

点击创建新插件,可以在插件模板选择要写的插件类型和语言格式

点击创建后,插件列表中就会出现刚刚创建的新插件。

这时候,点击打开插件目录,会发现原本空空的插件目录中多了一个刚刚新建的插件文件夹,右键使用VSCode打开。

可以注意到,目录下有两个文件“main.lua”和“package.json”。其中main.lua是插件的入口脚本,package.json是插件的配置文件。

双击main.lua后可以看到“onDestroy”方法,可以将之后的清理代码添加到此处。保存编写后的代码,在编辑器中点击刷新插件列表,可以将最新插件代码同步到编辑器。如果这时候编辑器保存,如果不是代码书写错误,可以通过重启编辑器进行刷新插件。

 编辑器的个人常用API

App是工程入口类,类型:CS.FairyEditor.App。通过LuaAPI中的CS_FairyEditor_App可以看到编辑器中的功能字段。下面将列出将要用的字段和方法。

CS.FairyEditor.App
字段名类型作用
projectCS.FairyEditor.FProject记录当前工程的配置和资源
libViewCS.FairyEditor.View.LibraryView编辑器的资源库面板
inspectorViewCS.FairyEditor.View.InspectorView编辑器的检查器面板
consoleViewCS.FairyEditor.View.ConsoleView编辑器的控制台面板
menuCS.FairyEditor.Component.IMenu编辑器的菜单栏
pluginManagerCS.FairyEditor.PluginManager插件管理
CS.FairyEditor.FProject
字段名类型作用
namestring工程名“如:FGUIProject”
basePathstring工程的路径“如:D:\Documents\FGUIProject”
assetsPathstring工程的路径“如:D:\Documents\FGUIProject\assets”
allPackagesCS.FairyEditor.Fpackage[]工程中的所有包
allBranchesstring[]工程中的所有分支
CS.FairyEditor.Fpackage
字段名类型作用
namestring当前包的名字
itemsCS.FairyEditor.FPackageItem[]当前包下的资源
CS.FairyEditor.FPackageItem
字段名类型作用
pathstring资源路径
namestring资源名
CS.FairyEditor.View.LibraryView
字段名类型作用
contextMenuCS.FairyEditor.Component.NPopupMenu资源库的右键菜单
CS.FairyEditor.Component.NPopupMenu
方法名参数作用
AddItemcaption:string, name:string, selectCallback:(fun():void)添加一个菜单项并设置选中回调事件
AddSeperator添加菜单分割线
SetItemGrayedstring name, bool grayed设置目标不能点击
onPopupCS.FairyGUI.EventListener菜单弹出事件

 开始编写插件代码

需求1

需求1:在工具菜单中添加“导出所有UI名字”的菜单项,点击后复制结果。

前提:所有UI界面具有相同的命名规则,这里我用的是UIXXX,所以在获取所有UI的时候只需要检测当前文件的名字UI是否存在。在这个需求实现的功能中,需要准备一个lua代码格式的文本代码,之后会将classField替换为获取到的UI名。

local tmp_ui_type = [[
---@class UIType
return {classField
}
]]

代码已经加了详细的注解,可以直接查看完整代码:

---@type CS.FairyEditor.App
local _app = CS.FairyEditor.App
local project = _app.project
---输出绝对文件路径
local file_out_path =("%s/UIType.lua"):format(project.basePath)
---Lua模板
local tmp_ui_type = [[
---@class UIType
return {classField
}
]]
---获取工具菜单
---@type CS.FairyEditor.Component.MenuBar
local toolMenu = _app.menu:GetSubMenu("tool")
---添加分隔符
toolMenu:AddSeperator()
---添加菜单,显示名字,内部标签名,回调方法
toolMenu:AddItem("导出UIType","XiaoExportUIType",function()local _classField = ""---获取工程中的所有包,返回值是列表local allPackages = _app.project.allPackagesfor i = 1, allPackages.Count do---C#索引从0开始---@type CS.FairyEditor.FPackagelocal package = allPackages[i - 1]---获取当前包中的所有子项,返回值是列表local items = package.itemsfor i = 1, items.Count do---@type CS.FairyEditor.FPackageItemlocal item = items[i - 1]---记录所有UI开头的子项if string.find(item.name,"UI") == 1 thenlocal uiType = string.format("%s = %s_%s,\n\t",item.name,package.name,item.name)_classField = _classField .. uiTypeendendend---输出日志打印fprint(_classField)---替换模板tmp_ui_type = tmp_ui_type:gsub("classField",_classField)---写出模板local f = io.open(file_out_path,"w")f:write(tmp_ui_type)f:close()---输出路径打印fprint(string.format("导出UIType:[url]%s[/url]",file_out_path))
end)
function onDestroy()
-------do cleanup here-------toolMenu:RemoveItem("XiaoExportUIType")
end

 需求2:

需求2:在资源库的右键菜单中添加“复制组件脚本路径”,方便提取当前组件的require路径。并且实现组件筛选,在不满足条件的情况下,“复制组件脚本路径”菜单项置灰不可用。

前提:所有非UI的组件都在当前包的Comps的文件夹下存放。

重新新建一个插件或者在之前的插件中继续编写,这里我是接着之前的插件继续写。

---添加资源库右键菜单
---需求:复制Comps文件夹下的组件所转化的脚本路径
---获取右键菜单
local libcontextMenu = _app.libView.contextMenu
---添加分割线
libcontextMenu:AddSeperator()
libcontextMenu:AddItem("复制组件脚本路径","XiaoCopyAssetPath",function()---获取当前选中的资源---@type CS.FairyEditor.FPackageItemlocal item = _app.libView:GetSelectedResource()---检测资源是否满足条件if item.path:find("/Comps/") == 1 then---准备复制local cp_str = ("require(\"UI.%s.Comps.%s\")"):format(item.owner.name,item.name)---Unity复制操作CS.UnityEngine.GUIUtility.systemCopyBuffer = cp_str---弹窗提示_app.Alert("复制成功")else_app.Alert("复制失败")end
end)
---在弹出的菜单中检测当前选择的资源是否满足条件
libcontextMenu.onPopup:Add(function()---@type CS.FairyEditor.FPackageItemlocal item = _app.libView:GetSelectedResource()local grayed = trueif item.path:find("/Comps/") == 1 then-- bodygrayed = falseendlibcontextMenu:SetItemGrayed("XiaoCopyAssetPath",grayed)
end)

之后不要忘记在onDestroy方法中移除我们的菜单项“XiaoCopyAssetPath”

toolMenu:RemoveItem("XiaoCopyAssetPath")

 

完整插件代码

---@type CS.FairyEditor.App
local _app = CS.FairyEditor.App
local project = _app.project---输出绝对文件路径
local file_out_path =("%s/UIType.lua"):format(project.basePath)---Lua模板
local tmp_ui_type = [[
---@class UIType
return {classField
}
]]---获取工具菜单
---@type CS.FairyEditor.Component.MenuBar
local toolMenu = _app.menu:GetSubMenu("tool")
---添加分隔符
toolMenu:AddSeperator()
---添加菜单,显示名字,内部标签名,回调方法
toolMenu:AddItem("导出UIType","XiaoExportUIType",function()local _classField = ""---获取工程中的所有包,返回值是列表local allPackages = _app.project.allPackagesfor i = 1, allPackages.Count do---C#索引从0开始---@type CS.FairyEditor.FPackagelocal package = allPackages[i - 1]---获取当前包中的所有子项,返回值是列表local items = package.itemsfor i = 1, items.Count do---@type CS.FairyEditor.FPackageItemlocal item = items[i - 1]---记录所有UI开头的子项if string.find(item.name,"UI") == 1 thenlocal uiType = string.format("%s = %s_%s,\n\t",item.name,package.name,item.name)_classField = _classField .. uiTypeendendend---输出日志打印fprint(_classField)---替换模板tmp_ui_type = tmp_ui_type:gsub("classField",_classField)---写出模板local f = io.open(file_out_path,"w")f:write(tmp_ui_type)f:close()---输出路径打印fprint(string.format("导出UIType:[url]%s[/url]",file_out_path))
end)---添加资源库右键菜单
---需求:复制Comps文件夹下的组件所转化的脚本路径
---获取右键菜单
local libcontextMenu = _app.libView.contextMenu
---添加分割线
libcontextMenu:AddSeperator()
libcontextMenu:AddItem("复制组件脚本路径","XiaoCopyAssetPath",function()---获取当前选中的资源---@type CS.FairyEditor.FPackageItemlocal item = _app.libView:GetSelectedResource()---检测资源是否满足条件if item.path:find("/Comps/") == 1 then---准备复制local cp_str = ("require(\"UI.%s.Comps.%s\")"):format(item.owner.name,item.name)---Unity复制操作CS.UnityEngine.GUIUtility.systemCopyBuffer = cp_str---弹窗提示_app.Alert("复制成功")else_app.Alert("复制失败")end
end)---在弹出的菜单中检测当前选择的资源是否满足条件
libcontextMenu.onPopup:Add(function()---@type CS.FairyEditor.FPackageItemlocal item = _app.libView:GetSelectedResource()local grayed = trueif item.path:find("/Comps/") == 1 then-- bodygrayed = falseendlibcontextMenu:SetItemGrayed("XiaoCopyAssetPath",grayed)
end)function onDestroy()
-------do cleanup here-------toolMenu:RemoveItem("XiaoExportUIType")toolMenu:RemoveItem("XiaoCopyAssetPath")
end

菜单的操作目前只用到了这两种,后面在实际操作中如果还有,则会继续更新!

http://www.yayakq.cn/news/488468/

相关文章:

  • 广州 网站建设 行价网站建设信息
  • 江苏省教育现代化建设水平监测网站淘宝店铺 发布网站建设
  • 安阳做网站多少钱哪些平台可以建立网站吗
  • 注册做网站的营业执照ps做游戏网站
  • 中介网站模板青岛建手机网站哪家好
  • 如何做自己公司的网站广州seo搜索
  • 网站表单制作中企动力做的网站后台如何登陆
  • 快速排名网站系统无锡有哪些做网站的公司
  • 张店做网站沈阳seo代理计费
  • 深圳网站建设定制开发公司网站建设招标文件范本
  • 一起做网店网站哪里进货的加工中心编程培训学校
  • 通过服务推广网站湖北好的快速排名系统
  • 哪里可以在百度做网站深圳建设交易宝安
  • 网站上线如何做公司名字华为官方手机商城
  • 网站前端设计软件wordpress调用python脚本
  • 企业网站建设一般原则建设一个新的网站需要准备什么
  • 有用建站宝盒做网站的吗如何将百度收录网站
  • 做网站什么用天猫网站建设的目标
  • 温州免费建站模板短视频剪辑培训学校
  • 莱芜益寿堂网站广告片宣传片拍摄公司
  • 免费下载代码的网站湖南seo优化企业
  • 做简历网站知乎广告主
  • 西安网站制作顶尖微网站怎么做的
  • 四川建设网电子招投标网站企业网站开发协议
  • 农产品网站如何做地推嘉兴 网站 建设
  • 吉林省建设工程质监站网站网站放视频代码
  • 深圳做网站的网住房和城乡建设厅证书查询网
  • 做科研交流常用的网站获取网站后台地址
  • 简易个人网站模板阿里云网站建设官方自营店
  • 大同网站建设公司奥创微信管理系统