Unity FairyGUI(一)

Unity FairyGUI(一)

一.加载UI包

  • 可以从Resources加载
  • 可以从AssetBundle加载

* 注意的问题,从AssetBundle中加载需要注意释放和加载,如果自己管理,需要特别注意

FGUI文档介绍加载卸载以及内存管理

public class Lesson7 : MonoBehaviour
{
    private void Start()
    {
        // =============方法一:从Resources加载=============
        // 将导出的UI文件放入Resources目录或者其子目录下
        // 使用FairyGUI提供的 API加载对应UI
        // AddPackage会先使用传入的路径作为key进行检测,如果这个包已经添加了 不会重复添加
        // 直接填写包名即可 不需要加_fui(UI/包名)
         var package1 = UIPackage.AddPackage("UI/Package1");
         //遍历依赖包相关信息
         foreach (var dependenciePack in package1.dependencies)
         {
             UIPackage.AddPackage(dependenciePack["name"]);
         }


        //=============方法二:从两个AssetBundle包加载=============
        //将定义文件和图集资源分别放入两个AssetBundle文件中
        //自己去加载对应的AB包
        //AddPackage在加载AB包时没有排重检测机制,需要自己判断
        //自己去判断 AB包 是否重复加载
        AssetBundle resAB = null;
        AssetBundle bytesAB = null;
        UIPackage.AddPackage(bytesAB, resAB);
        
        //=============方法三:从一个AB包加载=============
        //将定义文件和图集打入一个AssetBundle文件中
        //AddPackage在加载AB包时没有排重检测机制,需要自己判断
        AssetBundle AB = null;
        UIPackage.AddPackage(AB);
        
        
        #region 知识点五 卸载UI包
        //当一个包不在使用时,可以卸载
        //包卸载后,所有包里的贴图等资源均会被卸载,创建出来的组件也无法显示
        //一般不建议包进行频繁装载卸载,因为每次装载卸载必然是要消耗CPU时间(意味着耗电)和产生大量GC的。
        //UI系统占用的内存是可以精确估算的,你可以按照包的使用频率设定哪些包是常驻内存的(建议尽量多)。
        UIPackage.RemovePackage("Teach");
        UIPackage.RemoveAllPackages();
        #endregion
        
        #region 知识点六 包内存管理
        //1.AddPackage只有用到才会载入贴图、声音等资源。
        //如果你需要提前全部载入
        package1.LoadAllAssets();

        //2.如果UIPackage是从AssetBundle中载入的,在RemovePackage时AssetBundle才会被Unload(true)。
        //如果你确认所有资源都已经载入了(例如调用了LoadAllAssets),也可以自行卸载AssetBundle。
        //如果你的ab是自行管理,不希望FairyGUI做任何处理的,可以设置UIPackage.unloadBundleByFGUI为false。
        UIPackage.unloadBundleByFGUI = false;
        #endregion
    }

}

二.UIPanel加载

public class Lesson8 : MonoBehaviour
{
    void Start()
    {
        UIPackage.AddPackage("Package1");
        
        var go = new GameObject("UIPanel");
        var uiPanel = go.AddComponent<UIPanel>();
        uiPanel.packageName = "Package1";
        uiPanel.componentName = "LearnFGUI";
        
        uiPanel.SetHitTestMode(HitTestMode.Raycast);
        uiPanel.SetSortingOrder(100,true);

        uiPanel.container.renderMode = RenderMode.ScreenSpaceCamera;
        uiPanel.container.renderCamera = null;
        uiPanel.container.fairyBatching = false;
        
        uiPanel.CreateUI();
    }
}
  • 当渲染模式为世界空间时,需要如下图设置
    在这里插入图片描述

三.动态创建UI

如何选择使用UIPanel还是动态创建?

  • 当创建的是3DUI或者一开始就要显示的UI时可以使用UIPanel
  • 当正式的项目中使用动态创建UI的方式更方便管理UI
    *注意FGUI不要和GameObject有牵连,销毁UI使用内置的Dispose方法
public class Lesson9 : 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);
        
        
        //销毁Panel
        com.Dispose();
        
        UIPackage.CreateObjectAsync("Package1", "LearnFGUI", (Gobj) =>
        {
            var com1 = Gobj.asCom;
            GRoot.inst.AddChild(com1);
            
            //Component属性
            com1.x = 10;
            com1.y = 10;
            com1.SetPosition(10,10,0);

            com1.width = 1000;
            com1.height = 900;
            com1.SetSize(1365,768);
            
            com1.SetPivot(0,0,true);

            com1.rotation = 90f;

            com1.sortingOrder = 1;

            com1.opaque = true;
            
            print(com1.numChildren);
            
            print(com1.GetChild("n1"));
            print(com1.GetChildAt(4));

            //升序,大的先渲染
            com1.childrenRenderOrder = ChildrenRenderOrder.Ascent;
            // //降序
            // com1.childrenRenderOrder = ChildrenRenderOrder.Descent;
            // //拱形
            // com1.childrenRenderOrder = ChildrenRenderOrder.Arch;
            //com1.apexIndex = 5;
        });
    }
}

四.相关脚本

1.Stage Camera

在这里插入图片描述

在这里插入图片描述

2.UIContentScaler

在设置UI自适应时,已经默认添加了这个脚本,若果需要也可自行添加
在这里插入图片描述

3.UIConfig

设置全局配置
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值