Unity FairyGUI(五)

这篇博客介绍了Unity中FairyGUI库的应用,包括输入框的配置,如限制长度和设置提示文本;组的使用,用于集中管理图片的显示隐藏;以及控制器的功能,如分页、按钮状态管理和属性切换。示例代码展示了如何创建和操作这些组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity FairyGUI(五)

一.输入框

官方文档

    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"]);
        var com = UIPackage.CreateObject("Package1", "LearnFGUI").asCom;
        GRoot.inst.AddChild(com);

        var textInput = com.GetChild("n23").asTextInput;
        textInput.maxLength = 5;
        textInput.displayAsPassword = false;
        textInput.promptText = "请输入密码";
        
        textInput.onChanged.Add(() =>
        {
            print(textInput.text);
        });

        textInput.onSubmit.Add(() =>
        {
            print("输入结束");
        });

        // textInput.onFocusIn;焦点进入
        // textInput.onFocusOut;焦点失去
        //textInput.RequestFocus();设置焦点
    }

二.组

官方文档

  • 主要作用是把一些图片集中在一起控制显隐
public class Lesson23 : 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"]);
        var com = UIPackage.CreateObject("Package1", "LearnFGUI").asCom;
        GRoot.inst.AddChild(com);

        var group = com.GetChild("n27").asGroup;
        group.y = 0;
        //group.visible = false; 
        group.layout = GroupLayoutType.Horizontal;

        var img = UIPackage.CreateObject("Package1", "quanlity_1");
        com.AddChild(img);
        img.group = group;

        for (int i = 0; i < com.numChildren; i++)
        {
            if (com.GetChildAt(i).group == group)
            {
                Debug.Log(com.GetChildAt(i)+":在组件当中");
            }
        }
    }
}

三.控制器

官方文档

  • 分页 一个组件可以由多个页面组成。

  • 按钮状态 按钮通常有按下、鼠标悬浮等多个状态,我们可以利用控制器为每个状态安排不同的显示内容。

  • 属性变化 利用控制器,我们可以使元件具有多个不同的形态,并且可以方便地切换。

public class Lesson24 : MonoBehaviour
{
    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"]);
        var com = UIPackage.CreateObject("Package1", "LearnFGUI").asCom;
        GRoot.inst.AddChild(com);

        var ctrl = com.GetChild("n28").asCom;
        var c = ctrl.GetController("c1");
        c.onChanged.Add((val) =>
        {
            Debug.Log(c.selectedIndex);
        });
        ctrl.GetChild("n0").onGearStop.Add(() =>
        {
            Debug.Log("播放结束");
        });
        GearBase.disableAllTweenEffect = false;//是否显示动画
        c.selectedIndex = 1;
        c.SetSelectedIndex(1);//不会调用相应的回调
        //c.selectedPage = "xxx";
        //c.SetSelectedPage("xxx");//不会调用相应的回调
    }
}
<think>好的,我需要帮助用户在Unity中使用FairyGUI动态创建GButton。首先,我需要回忆FairyGUI的基本使用流程。FairyGUI通常需要一个UI包,用户需要先加载这个包。用户提到动态创建,所以应该不是直接在编辑器中拖放,而是通过代码实例化。 然后,GButton的动态创建可能需要使用UIPackage.CreateObject方法,传入包名和组件名。记得要转换类型为GButton,否则可能得到的是GObject,无法使用按钮的特定方法。 接下来,用户可能需要设置按钮的位置、大小等属性。FairyGUI的坐标系统是基于舞台的,所以可能需要使用SetXY方法来定位。另外,事件监听也是关键,比如添加点击事件的回调函数。 还要考虑是否需要在创建后将其添加到父组件中,比如GRoot或者另一个容器。如果不添加到显示列表,按钮可能不可见。 可能的问题点包括包是否已经加载,路径是否正确,以及资源是否正确导出。此外,如果按钮有自定义组件,需要确保组件已经正确导出并在代码中可用。 需要参考FairyGUI的官方文档或社区资源,确认步骤是否正确。比如,创建对象后可能需要设置一些属性,或者调整适配方式。如果用户遇到错误,可能需要检查日志,查看是否包加载失败或对象创建失败。 最后,示例代码的结构应该清晰,展示从加载包到创建按钮,再到设置属性和事件处理的完整流程。可能还需要提醒用户关于资源管理和内存释放的问题,比如卸载包的时候要注意引用计数。</think>在Unity中动态创建FairyGUI的GButton需要遵循以下步骤: ### 1. 准备UI资源 - 使用FairyGUI编辑器创建按钮组件并导出UI包 - 将生成的`package01`文件夹(包含二进制文件和纹理)放入Unity项目的Resources目录 ### 2. 核心代码实现 ```csharp using FairyGUI; public class ButtonCreator : MonoBehaviour { void Start() { // 加载UIUIPackage.AddPackage("UI/package01"); // 动态创建GButton GButton button = (GButton)UIPackage.CreateObject("Package01", "ButtonComponent"); // 设置属性 button.SetSize(200, 60); button.SetXY(100, 100); button.title = "动态按钮"; // 添加点击事件 button.onClick.Add(() => { Debug.Log("按钮被点击!"); }); // 添加到显示层级 GRoot.inst.AddChild(button); } } ``` ### 3. 关键API说明 1. `UIPackage.AddPackage()`:加载UI包资源[^4] 2. `UIPackage.CreateObject()`:根据组件名称创建实例 3. `GButton.onClick`:按钮点击事件监听器 4. `GRoot.inst`:根显示容器 ### 4. 注意事项 - 确保UI组件在FairyGUI编辑器中已设置为"导出" - 组件命名需与代码中的名称严格匹配 - 建议在Profiler中监控UI对象的内存占用[^3] - 使用对象池技术管理频繁创建的按钮[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值