通知设置 新通知
在插件中实现控制台清空和插件刷新
编辑器使用 • misakacirno 发表了文章 • 0 个评论 • 25 次浏览 • 2025-12-17 15:15
let consoleViewRoot: CS.FairyGUI.GComponent = App.consoleView.GetChildAt(0).asCom;
let clearButton: CS.FairyGUI.GButton = consoleViewRoot.GetChild("btnClear").asButton;
clearButton.onClick.Call();同时,通过这个途径,我们也可以获取控制台中的所有内容:
export function GetConsoleLines(): string[] {
/**
* ConsoleView的结构
* - ""(GComponenet)
* - "list"(GList)
* - "n12"(GGraph)
* - "btnCopy"(GButton)
* - "btnClear"(GButton)
* - "n9"(GGroup)
*/
let result: string[] = [];
let consoleViewRoot: CS.FairyGUI.GComponent = App.consoleView.GetChildAt(0).asCom;
let consoleList: CS.FairyGUI.GList = consoleViewRoot.GetChild("list").asList;
if (consoleList == null) {
console.warn("未找到Console列表");
return result;
}
console.log(`Console List Item Count: ${consoleList.numItems}`);
for (let i = 0; i < consoleList.numItems; i++) {
let item: CS.FairyGUI.GButton = consoleList.GetChildAt(i).asButton;
// console.log(`Console List Item ${i}: ${item.name} | ${item.GetType().FullName} | ${item.text}`);
result.push(item.text);
}
return result;
}
而插件并没有类似于 App.pluginView 的东西可以直接访问,经过一些研究,我发现它被存储于 App.viewManager 之中。
App.viewManager 内部应该是有个列表来管理成员,通过遍历其 viewIds 属性即可获得,例如:
let ids = App.viewManager.viewIds;
for (let i = 0; i < ids.Count; i++) {
let viewId = ids.get_Item(i);
let view = App.viewManager.GetView(viewId);
console.log(` View ${i}: ID=${viewId} | Name=${view.name} | Type=${view.GetType().FullName}`);
}可获得结果:
View 0: ID=fairygui.LibraryView | Name=fairygui.LibraryView | Type=FairyEditor.View.LibraryView
View 1: ID=fairygui.InspectorView | Name=fairygui.InspectorView | Type=FairyEditor.View.InspectorView
View 2: ID=fairygui.HierarchyView | Name=fairygui.HierarchyView | Type=FairyEditor.View.HierarchyView
View 3: ID=fairygui.PreviewView | Name=fairygui.PreviewView | Type=FairyEditor.View.PreviewView
View 4: ID=fairygui.TimelineView | Name=fairygui.TimelineView | Type=FairyEditor.View.TimelineView
View 5: ID=fairygui.TransitionListView | Name=fairygui.TransitionListView | Type=FairyEditor.View.TransitionListView
View 6: ID=fairygui.FavoritesView | Name=fairygui.FavoritesView | Type=FairyEditor.View.FavoritesView
View 7: ID=fairygui.SearchView | Name=fairygui.SearchView | Type=FairyEditor.View.SearchView
View 8: ID=fairygui.ConsoleView | Name=fairygui.ConsoleView | Type=FairyEditor.View.ConsoleView
View 9: ID=fairygui.ReferenceView | Name=fairygui.ReferenceView | Type=FairyEditor.View.ReferenceView
View 10: ID=fairygui.PlugInView | Name=fairygui.PlugInView | Type=FairyEditor.View.PlugInView
View 11: ID=fairygui.DocumentView | Name=fairygui.DocumentView | Type=FairyEditor.View.DocumentView
View 12: ID=fairygui.TestView | Name=fairygui.TestView | Type=FairyEditor.View.TestView
可以看出,编辑器中的全部窗口应该都在这个列表里了。
其中,fairygui.PlugInView 就是要找的插件窗口了。此时就可以用类似的方法调用了:
let pluginViewRoot: CS.FairyGUI.GComponent = App.viewManager.GetView("fairygui.PlugInView").GetChildAt(0).asCom;
let reloadButton: CS.FairyGUI.GButton = pluginViewRoot.GetChild("reload").asButton;
reloadButton.onClick.Call();但想法是美好的,现实是骨感的。
触发reload之后应该会卸载插件环境,但是执行指令还在插件的代码中执行,这里就会出现生命周期冲突的问题。
表现的迹象就是编辑器卡死随后闪退。
因此在插件中想要reload插件似乎是不现实的。也难怪这部分内容没有直接公开在编辑器的API中。 查看全部
let consoleViewRoot: CS.FairyGUI.GComponent = App.consoleView.GetChildAt(0).asCom;同时,通过这个途径,我们也可以获取控制台中的所有内容:
let clearButton: CS.FairyGUI.GButton = consoleViewRoot.GetChild("btnClear").asButton;
clearButton.onClick.Call();
export function GetConsoleLines(): string[] {
/**
* ConsoleView的结构
* - ""(GComponenet)
* - "list"(GList)
* - "n12"(GGraph)
* - "btnCopy"(GButton)
* - "btnClear"(GButton)
* - "n9"(GGroup)
*/
let result: string[] = [];
let consoleViewRoot: CS.FairyGUI.GComponent = App.consoleView.GetChildAt(0).asCom;
let consoleList: CS.FairyGUI.GList = consoleViewRoot.GetChild("list").asList;
if (consoleList == null) {
console.warn("未找到Console列表");
return result;
}
console.log(`Console List Item Count: ${consoleList.numItems}`);
for (let i = 0; i < consoleList.numItems; i++) {
let item: CS.FairyGUI.GButton = consoleList.GetChildAt(i).asButton;
// console.log(`Console List Item ${i}: ${item.name} | ${item.GetType().FullName} | ${item.text}`);
result.push(item.text);
}
return result;
}
而插件并没有类似于 App.pluginView 的东西可以直接访问,经过一些研究,我发现它被存储于 App.viewManager 之中。
App.viewManager 内部应该是有个列表来管理成员,通过遍历其 viewIds 属性即可获得,例如:
let ids = App.viewManager.viewIds;可获得结果:
for (let i = 0; i < ids.Count; i++) {
let viewId = ids.get_Item(i);
let view = App.viewManager.GetView(viewId);
console.log(` View ${i}: ID=${viewId} | Name=${view.name} | Type=${view.GetType().FullName}`);
}
View 0: ID=fairygui.LibraryView | Name=fairygui.LibraryView | Type=FairyEditor.View.LibraryView
View 1: ID=fairygui.InspectorView | Name=fairygui.InspectorView | Type=FairyEditor.View.InspectorView
View 2: ID=fairygui.HierarchyView | Name=fairygui.HierarchyView | Type=FairyEditor.View.HierarchyView
View 3: ID=fairygui.PreviewView | Name=fairygui.PreviewView | Type=FairyEditor.View.PreviewView
View 4: ID=fairygui.TimelineView | Name=fairygui.TimelineView | Type=FairyEditor.View.TimelineView
View 5: ID=fairygui.TransitionListView | Name=fairygui.TransitionListView | Type=FairyEditor.View.TransitionListView
View 6: ID=fairygui.FavoritesView | Name=fairygui.FavoritesView | Type=FairyEditor.View.FavoritesView
View 7: ID=fairygui.SearchView | Name=fairygui.SearchView | Type=FairyEditor.View.SearchView
View 8: ID=fairygui.ConsoleView | Name=fairygui.ConsoleView | Type=FairyEditor.View.ConsoleView
View 9: ID=fairygui.ReferenceView | Name=fairygui.ReferenceView | Type=FairyEditor.View.ReferenceView
View 10: ID=fairygui.PlugInView | Name=fairygui.PlugInView | Type=FairyEditor.View.PlugInView
View 11: ID=fairygui.DocumentView | Name=fairygui.DocumentView | Type=FairyEditor.View.DocumentView
View 12: ID=fairygui.TestView | Name=fairygui.TestView | Type=FairyEditor.View.TestView
可以看出,编辑器中的全部窗口应该都在这个列表里了。
其中,fairygui.PlugInView 就是要找的插件窗口了。此时就可以用类似的方法调用了:
let pluginViewRoot: CS.FairyGUI.GComponent = App.viewManager.GetView("fairygui.PlugInView").GetChildAt(0).asCom;
let reloadButton: CS.FairyGUI.GButton = pluginViewRoot.GetChild("reload").asButton;
reloadButton.onClick.Call();但想法是美好的,现实是骨感的。触发reload之后应该会卸载插件环境,但是执行指令还在插件的代码中执行,这里就会出现生命周期冲突的问题。
表现的迹象就是编辑器卡死随后闪退。
因此在插件中想要reload插件似乎是不现实的。也难怪这部分内容没有直接公开在编辑器的API中。
GLoader在被销毁时,没有调用FreeExternal
回复Unity • Scottosong 发起了问题 • 1 人关注 • 0 个回复 • 49 次浏览 • 2025-12-15 15:06
控制器的动作如何停止
CocosCreator • heartkey 回复了问题 • 3 人关注 • 2 个回复 • 169 次浏览 • 2025-12-15 14:19
在fairygui里有没有像cocos creator中一样的预设体
CocosCreator • Erin 回复了问题 • 3 人关注 • 2 个回复 • 253 次浏览 • 2025-12-15 14:19
插件ImportResource后,资源不会立刻显示在包内,需要重新打开工程才能出现
编辑器使用 • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 134 次浏览 • 2025-12-15 14:18
NTexture.CustomDestroyMethod 没有收到回调
回复Unity • Scottosong 发起了问题 • 0 人关注 • 0 个回复 • 51 次浏览 • 2025-12-12 14:35
FairyGUI组件移动文件夹问题
编辑器使用 • misakacirno 回复了问题 • 2 人关注 • 1 个回复 • 77 次浏览 • 2025-12-04 13:26
cc3.7.2,使用registerFont 注册字体,fairygui设置全局字体不生效?
CocosCreator • letYou 回复了问题 • 4 人关注 • 3 个回复 • 1046 次浏览 • 2025-11-28 17:20
在FairyGUI里创建组件到鼠标位置
编辑器使用 • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 197 次浏览 • 2025-11-27 19:53
unity里边TMP字体放在场景里边,改变缩放会导致字体显示异常
Unity • 谷主 回复了问题 • 2 人关注 • 2 个回复 • 158 次浏览 • 2025-11-27 19:53
关于发布后纹理集问题
CocosCreator • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 191 次浏览 • 2025-11-27 19:52
编辑器插件如何添加新发布属性
编辑器使用 • 谷主 回复了问题 • 2 人关注 • 1 个回复 • 181 次浏览 • 2025-11-27 19:51