Unity FairyGUI(十二)

一.树

  • 添加节点已经在树里了才能使用,也就是已经AddChild了。
  • GTree目前不支持虚拟化
  • 初始化结点最好通过(一下这种方式初始化)
aTree.treeNodeRender = RenderTreeNode;
void RenderTreeNode(GTreeNode node, GComponent obj)
{}
public class Lesson43 : MonoBehaviour
{private void Start(){var panel = UIManager.Instance.ShowPanel<LearnFGUI5>("Package1");var gTree = panel.tree;var rootNode = gTree.rootNode;gTree.treeNodeRender += (node, component) =>{if (node.data != null){var data = node.data as object[];node.text = data[0].ToString();component.data = data[1];}};var node1 = new GTreeNode(true);var node2 = new GTreeNode(true);rootNode.AddChild(node1);rootNode.AddChild(node2);node1.text = "Resources";node1.icon = "ui://Package1/quanlity_1";node2.text = "Source";node2.icon = "ui://Package1/quanlity_0";for (int i = 0; i < 5; i++){var node1_0 = new GTreeNode(false);node1_0.data = new object[]{"node1_" + i,i};node1.AddChild(node1_0);}for (int i = 0; i < 10; i++){var node2_0 = new GTreeNode(false);node2_0.data = new object[]{"node2_" + i,i};node2.AddChild(node2_0);}gTree.onClickItem.Add((data) =>{if (data.data is GComponent gC)Debug.Log(gC.data);});}
}

二.窗体的简单应用

public class Lesson44 : MonoBehaviour
{private void Start(){GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);var pack = UIPackage.AddPackage("Package1");foreach (var item in pack.dependencies)UIPackage.AddPackage(item["name"]);//设置模态遮罩的颜色UIConfig.modalLayerColor = new Color(0, 0, 0, 0.5f);//锁定窗体时的资源UIConfig.windowModalWaiting = "ui://Package1/MovieClip";var window = new Window();window.contentPane = UIPackage.CreateObject("Package1", "TestWindow").asCom;window.contentPane.MakeFullScreen();window.contentPane.fairyBatching = true;window.contentPane.AddRelation(GRoot.inst,RelationType.Size);//设置模态需要在Show之前window.modal = true;window.Show();//隐藏//window.Hide();//获取窗口是否显示if (window.isShowing)Debug.Log("窗口正在显示");//锁定窗体window.ShowModalWait();//取消锁定window.CloseModalWait();}
}

三.窗体的高级应用

之前的简单窗体不够面向对象,可以继承一个Window基类,从而实现面向对象的窗体管理

  • GRoot中子对象的层级顺序需要我们手动管理
  • Window中帮我们实现了很多的排序功能
  • 一般采用混排的方式使用Window和组件面板
  • 主界面,全屏界面等全屏界面采用GRoot去添加
  • 背包,任务,商城,任务等弹出面板采用Window去添加
public class TestWindow : Window
{protected override void OnInit(){base.OnInit();UIPackage.AddPackage("Package1");this.contentPane = UIPackage.CreateObject("Package1", "TestWindow").asCom;this.contentPane.MakeFullScreen();this.contentPane.AddRelation(GRoot.inst,RelationType.Size);}protected override void OnShown(){base.OnShown();Debug.Log("显示自己时调用");}protected override void OnHide(){base.OnHide();Debug.Log("隐藏自己时调用");}protected override void DoShowAnimation(){base.DoShowAnimation();OnShown();}protected override void DoHideAnimation(){base.DoHideAnimation();OnHide();}
}
public class Lesson45 : MonoBehaviour
{private void Start(){GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);var testWindow = new TestWindow();testWindow.Show();//******************窗口管理******************//1.将某个窗体提到最前面GRoot.inst.BringToFront(testWindow);//2.隐藏所有窗体GRoot.inst.CloseAllWindows();//3.关闭除了模态窗体的所有窗体GRoot.inst.CloseAllExceptModals();//4.返回最顶层的窗体GRoot.inst.GetTopWindow();//5.当前是否有模态窗体显示if (GRoot.inst.hasModalWindow)Debug.Log("有模态窗体!!!");//6.是否开启窗体点击自动排序功能UIConfig.bringWindowToFrontOnClick = false;}
}

四.将UIManager添加对Window窗体的管理

  • 可以优化UIManager,因为Window也继承自GComponet的,所以有优化的空间
public class UIManager
{private static UIManager _instance;public static UIManager Instance{get { return _instance ?? (_instance = new UIManager()); }}private Dictionary<string, GComponent> _allPanelDic;private Dictionary<string, Window> _allWindowDic;public UIManager(){UIConfig.buttonSoundVolumeScale = 0.5f;_allPanelDic = new Dictionary<string, GComponent>();_allWindowDic = new Dictionary<string, Window>();UIObjectFactory.SetPackageItemExtension("ui://Package1/LearnFGUI4", typeof(LearnFGUI4));UIObjectFactory.SetPackageItemExtension("ui://Package1/LearnFGUI5",typeof(LearnFGUI5));GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);}public T ShowPanel<T>(string packName) where T : GComponent{var panelName = typeof(T).Name;if (panelName.StartsWith("UI_"))panelName = panelName.Substring(3);if (_allPanelDic.ContainsKey(panelName)){var currPanel = _allPanelDic[panelName];currPanel.visible = true;return _allPanelDic[panelName] as T;}var pack = UIPackage.AddPackage(packName);foreach (var item in pack.dependencies)UIPackage.AddPackage(item["name"]);var panel = (T) UIPackage.CreateObject(packName, panelName).asCom;GRoot.inst.AddChild(panel);panel.MakeFullScreen();panel.AddRelation(GRoot.inst, RelationType.Size);_allPanelDic.Add(panelName, panel);return panel;}public T ShowWindow<T>() where T : Window,new(){var windowName = typeof(T).Name;if (_allWindowDic.ContainsKey(windowName)){var window = _allWindowDic[windowName];window.Show();return window as T;}var newWindow = new T();newWindow.Show();_allWindowDic.Add(windowName,newWindow);return newWindow;}public void HidePanel<T>(bool isDispose) where T : GComponent{var panelName = typeof(T).Name;if (!_allPanelDic.ContainsKey(panelName))return;var panel = _allPanelDic[panelName];if (!isDispose)panel.visible = false;else{panel.Dispose();_allPanelDic.Remove(panelName);}}public void HideWindow<T>(bool isDisPose) where T : Window{var windowName = typeof(T).Name;if(!_allWindowDic.ContainsKey(windowName))return;var window = _allWindowDic[windowName];if(!isDisPose)window.Hide();else{window.Dispose();_allWindowDic.Remove(windowName);}}public T GetPanel<T>() where T : GComponent{var panelName = typeof(T).Name;if (_allPanelDic.ContainsKey(panelName))return _allPanelDic[panelName] as T;return null;}public T GetWindow<T>() where T : Window{var windowName = typeof(T).Name;if (_allWindowDic.ContainsKey(windowName))return _allWindowDic[windowName] as T;return null;}public void ClearPanel(bool isGC){foreach (var item in _allPanelDic)item.Value.Dispose();_allPanelDic.Clear();if (!isGC) return;UIPackage.RemoveAllPackages();GC.Collect();}public void ClearWindow(bool isGC){foreach (var item in _allWindowDic)item.Value.Dispose();_allWindowDic.Clear();if (!isGC) return;UIPackage.RemoveAllPackages();GC.Collect();}
}
public class LearnFGUI4Window : Window
{protected override void OnInit(){base.OnInit();UIPackage.AddPackage("Package1");this.contentPane = UIPackage.CreateObject("Package1", "LearnFGUI4").asCom;this.MakeFullScreen();this.AddRelation(GRoot.inst, RelationType.Size);}protected override void OnShown(){base.OnShown();}protected override void OnHide(){base.OnHide();}
}
public class Lesson46 : MonoBehaviour
{private void Start(){UIManager.Instance.ShowWindow<LearnFGUI4Window>();}
}

Unity FairyGUI(十二)相关推荐

  1. Unity(十二):2D飞刀小游戏

    展示 http://www.4399.com/flash/221013.htm 项目源码地址(有详细注释) https://download.csdn.net/download/weixin_4352 ...

  2. 详解Unity中的粒子系统Particle System (十二 | 终)

    前言 终于来到了最后一篇,粒子系统宣告终结!这十来篇博客删删改改写了半个多月,真是离谱.今天该讲案例与粒子系统的应用,那么我们就进入正题吧! 目录 前言 本系列提要 一.如何做出效果 二.案例演示 1 ...

  3. Ruby‘s Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效

    Ruby's Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效 前言 一.把特效物品进行切割 二.创建 particle System 三.创建彩色球 四.再设置一下其他属性 五. ...

  4. Unity C# 网络学习(十二)——Protobuf生成协议

    Unity C# 网络学习(十二)--Protobuf生成协议 一.安装 去Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件 由于我使用的是C#所以 ...

  5. unity 罗盘 Android,Unity之一天一个技术点(十二)-罗盘的实现

    Unity之一天一个技术点(十二)---指南针的实现 指南针的实现(可据镜头旋转改变) 代码如下: 变量简述: compassGUISkin皮肤用来显示指南针贴图 标签Label贴图用来作为指南针背景 ...

  6. Android项目实战(二十二):启动另一个APP or 重启本APP

    Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...

  7. Unity3D新手教学,让你十二小时,从入门到掌握!(三 )

    这一讲,我会教大家如何写碰撞检测的代码,然后还会教大家如何使用我介绍给大家的第一个Unity的插件. 那么,废话不多说,我先介绍插件如何下载和安装. VS For Unity 下载链接 进入这个页面, ...

  8. 【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略

    本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处.   文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...

  9. Unity FairyGUI(一)

    Unity FairyGUI(一) 一.加载UI包 可以从Resources加载 可以从AssetBundle加载 * 注意的问题,从AssetBundle中加载需要注意释放和加载,如果自己管理,需要 ...

最新文章

  1. 人工智能技术在抗击新冠肺炎疫情中大显身手
  2. zabbix_监控_进程
  3. socket有关的一些扩展函数介绍
  4. 斐波那契数列递归解法
  5. python-socket
  6. RedHat虚拟机Vmware Tools的安装教程
  7. Codeforces Beta Round #17 C. Balance DP
  8. [机器学习-数学] 矩阵求导(分母布局与分子布局),以及常用的矩阵求导公式
  9. 剑指offer面试题[5]-从尾到头打印链表
  10. 条款2. 最好使用C++转型操作符
  11. 设计模式---组件协作模式之观察者模式(Observer)
  12. 记Windows下二进制文件查看器
  13. 处理 ps cs3 打开提示 产品已停止 故障
  14. 省级面板数据(2000-2019)十一:农业(固定资产+农产品产量、播种面积)(stata版)
  15. iOS生产力之小工具合集
  16. 网管“北向接口”与“南向接口”
  17. 黑苹果MAC好处与坏处
  18. Python计算标准差和方差
  19. RTSP基础之RTSP/RTP推流协议流程
  20. onedrive电脑手机不同步_onedrive无法同步

热门文章

  1. 第二届邯郸钢铁展洽会 | 图扑软件荣获“2022钢铁行业智造之星奖”
  2. NVIDIA RTX A6000深度学习训练基准
  3. php if多条件,php – 多个IF语句条件
  4. sql server 完全卸载后报错unknown\comopnents\.....\...... vertify that you have sufficient access to thatkey
  5. Mybatis中mapper.xml中like模糊查询字符串,日期写法
  6. win10每回打开程序都弹出“是否允许更改设置”提示怎么办
  7. 您所需要的已经不是吃饱喝足和睡暖了
  8. python制作壁纸获取器exe,壁纸采集
  9. Java WEB练习
  10. C# AO/ArcEngine 栅格数据总结