49.Popup弹出和PopupMenu菜单栏

49.FGUI进阶-弹出功能


49.1 知识点

什么是弹出功能

  • 在UI系统中我们经常需要弹出一些组件
  • 这些组件在用户点击空白地方的情况下就会自动消失。
  • FairyGUI内置了这个功能。

弹出API

显示面板

//显示面板
TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("Teach");
//由于我们知道 包已经被加载 我这就不加载

弹出一个组件

//1.弹出一个组件 点击空白区域会自动把弹出的组件隐藏 不会删除
GLabel label = UIPackage.CreateObject("Teach", "MyLabel").asLabel;
label.text = "弹出内容";
panel.m_btnTest.onClick.Add(()=> {

    //1-1弹出在当前鼠标位置 假如在边缘地方会自动调整位置 再合适的位置显示
    GRoot.inst.ShowPopup(label);

    //1-2弹出在指定元件下 比如指定在m_graphTest下
    //GRoot.inst.ShowPopup(label, panel.m_graphTest);

    //1-3弹出在自定义位置 手动设置位置
    //GRoot.inst.ShowPopup(label);
    //label.SetXY(0, 0);

    //1-4弹出窗口(和正常显示窗口唯一区别就是多了点击空白关闭的功能,其它用法没有任何区别。)
    //GRoot.inst.ShowPopup(窗口对象)
});

关闭弹出内容

//2.关闭弹出内容 调用了就会自动隐藏 不会删除 
//GRoot.inst.HidePopup();

关闭通知事件

//3.关闭通知事件 就是隐藏弹出组件的回调 可以看情况删除弹出组件
label.onRemovedFromStage.Add(() =>
{
    print("移除舞台了");
});

弹出菜单栏功能

比如点击右键弹出菜单

在编辑器中制作菜单组件 菜单栏——>资源——>新建弹出菜单

设置相关参数

在Unity中的使用

//3.在Unity中的使用

//  3-1:设置全局菜单资源
UIConfig.popupMenu = "ui://Teach/PopupMenu";
//真正使用这个弹出菜单资源时 需要加载对应的UI包 我们这 前面已经加载了 这就不用加载了

//  3-2:创建菜单栏对象 PopupMenu 可以传入url进行有参创建 不传入就使用全局
PopupMenu popupMenu = new PopupMenu();
popupMenu.contentPane.width = 100;//设置宽度

//  3-3:添加菜单选项并设置回调函数
//弹出菜单点击后会自动隐藏菜单
//AddItem添加菜单选项 和回调函数 有无参回调和有参回调
popupMenu.AddItem("测试1", (obj) =>
{
    //可以通过这个data 转换成按钮 就可以得到我们点击的是谁了 获得点击的按钮㢟
    //(obj.data as GButton);
    print("1");
});
//得到点击按钮
GButton btn2 = popupMenu.AddItem("测试2", (obj) =>
{
    //可以通过这个data 转换成按钮 就可以得到我们点击的是谁了
    //(obj.data as GButton);
    print("2");
});
btn2.name = "btn2";

//当我们在面板上鼠标右键 点击时 会弹出菜单栏
panel.onTouchBegin.Add((obj) =>
{
    //记录点击的是右键
    if (obj.inputEvent.button == 1)
        //显示菜单栏
        popupMenu.Show();
});

//SetItemGrayed方法 第一个参数传入按钮的name 第二个参数传入是否置灰 置灰意味着不可用
popupMenu.SetItemGrayed("btn2", true);
//之后要改回来要用这个API设置回来


49.2 知识点代码

using FairyGUI;
using System.Collections;
using System.Collections.Generic;
using Teach;
using UnityEngine;

public class Lesson49_FGUI进阶_弹出功能 : MonoBehaviour
{

    void Start()
    {
        #region 知识点一 什么是弹出功能?
        //在UI系统中我们经常需要弹出一些组件
        //这些组件在用户点击空白地方的情况下就会自动消失
        //FairyGUI内置了这个功能。
        #endregion

        #region 知识点二 弹出API

        //显示面板
        TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("Teach");
        //由于我们知道 包已经被加载 我这就不加载

        //1.弹出一个组件 点击空白区域会自动把弹出的组件隐藏 不会删除
        GLabel label = UIPackage.CreateObject("Teach", "MyLabel").asLabel;
        label.text = "弹出内容";
        panel.m_btnTest.onClick.Add(()=> {

            //1-1弹出在当前鼠标位置 假如在边缘地方会自动调整位置 再合适的位置显示
            GRoot.inst.ShowPopup(label);

            //1-2弹出在指定元件下 比如指定在m_graphTest下
            //GRoot.inst.ShowPopup(label, panel.m_graphTest);

            //1-3弹出在自定义位置 手动设置位置
            //GRoot.inst.ShowPopup(label);
            //label.SetXY(0, 0);

            //1-4弹出窗口(和正常显示窗口唯一区别就是多了点击空白关闭的功能,其它用法没有任何区别。)
            //GRoot.inst.ShowPopup(窗口对象)
        });

        //2.关闭弹出内容 调用了就会自动隐藏 不会删除 
        //GRoot.inst.HidePopup();

        //3.关闭通知事件 就是隐藏弹出组件的回调 可以看情况删除弹出组件
        label.onRemovedFromStage.Add(() =>
        {
            print("移除舞台了");
        });

        #endregion

        #region 知识点三 弹出菜单栏功能
        //比如点击右键弹出菜单

        //1.在编辑器中制作菜单组件 菜单栏——>资源——>新建弹出菜单

        //2.设置相关参数

        //3.在Unity中的使用

        //  3-1:设置全局菜单资源
        UIConfig.popupMenu = "ui://Teach/PopupMenu";
        //真正使用这个弹出菜单资源时 需要加载对应的UI包 我们这 前面已经加载了 这就不用加载了

        //  3-2:创建菜单栏对象 PopupMenu 可以传入url进行有参创建 不传入就使用全局
        PopupMenu popupMenu = new PopupMenu();
        popupMenu.contentPane.width = 100;//设置宽度

        //  3-3:添加菜单选项并设置回调函数
        //弹出菜单点击后会自动隐藏菜单
        //AddItem添加菜单选项 和回调函数 有无参回调和有参回调
        popupMenu.AddItem("测试1", (obj) =>
        {
            //可以通过这个data 转换成按钮 就可以得到我们点击的是谁了 获得点击的按钮㢟
            //(obj.data as GButton);
            print("1");
        });
        //得到点击按钮
        GButton btn2 = popupMenu.AddItem("测试2", (obj) =>
        {
            //可以通过这个data 转换成按钮 就可以得到我们点击的是谁了
            //(obj.data as GButton);
            print("2");
        });
        btn2.name = "btn2";

        //当我们在面板上鼠标右键 点击时 会弹出菜单栏
        panel.onTouchBegin.Add((obj) =>
        {
            //记录点击的是右键
            if (obj.inputEvent.button == 1)
                //显示菜单栏
                popupMenu.Show();
        });

        //SetItemGrayed方法 第一个参数传入按钮的name 第二个参数传入是否置灰 置灰意味着不可用
        popupMenu.SetItemGrayed("btn2", true);
        //之后要改回来要用这个API设置回来

        #endregion
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
            GRoot.inst.HidePopup();
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏