栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity FairyGUI(十二)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity FairyGUI(十二)

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("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 _allPanelDic;
    private Dictionary _allWindowDic;
    public UIManager()
    {
        UIConfig.buttonSoundVolumeScale = 0.5f;
        _allPanelDic = new Dictionary();
        _allWindowDic = new Dictionary();
        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(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() 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(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(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() where T : GComponent
    {
        var panelName = typeof(T).Name;
        if (_allPanelDic.ContainsKey(panelName))
            return _allPanelDic[panelName] as T;
        return null;
    }
    public T GetWindow() 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();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901408.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号