8.加载包

8.FGUI基础-基础知识-使用发布的UI-加载包


8.1 知识点

导入UI资源

直接放在Resources或其子目录下

或者把UI资源打包进AB包中

纹理设置注意事项

纹理设置


  • Texture Type:设置为Default
  • Texture Shape:设置为2D
  • Generate Mip Maps:关闭,UI不需要该功能
  • Filter Mode:建议设置为Bilinear,缩放时效果更平滑。但是如果出现过于模糊的效果可以使用Point。一般情况Bilinear即可,可以根据不同的纹理情况进行设置

通用设置


  • MaxSize:设置为2048
  • Format:
    • 桌面:DXT5
    • Android:ETC1
    • IPhone:PVRTC
    • 这些格式会降低内存占用

更节约空间的分离Alpha通道的导出模式

在编辑器中导出时,在纹理集定义时选择分离Alpha通道可以更加节约空间。发布出来会出现多一张没有颜色的图集。


加载UI包

从Resources加载

//将导出的UI文件放入Resources目录或者其子目录下
//使用FairyGUI提供的 API加载对应UI

//AddPackage会先使用传入的路径作为key进行检测,如果这个包已经添加了 不会重复添加
//直接填写包名即可 不需要加_fui
UIPackage teachPackage = UIPackage.AddPackage("UI/FGUI教程");
//遍历当前包的所以依赖包 可以获得依赖包相关信息
foreach (var item in teachPackage.dependencies)
{
    //item["name"]可以获取到 依赖包的名字  可以遍历加载所有依赖包
    UIPackage.AddPackage(item["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);

卸载UI包

//当一个包不在使用时,可以卸载
//包卸载后,所有包里的贴图等资源均会被卸载,创建出来的组件也无法显示
//一般不建议包进行频繁装载卸载,因为每次装载卸载必然是要消耗CPU时间(意味着耗电)和产生大量GC的。
//UI系统占用的内存是可以精确估算的,你可以按照包的使用频率设定哪些包是常驻内存的(建议尽量多的包常驻)。

//卸载指定包
UIPackage.RemovePackage("FGUI教程");

//卸载所有包
UIPackage.RemoveAllPackages();

包内存管理

//AddPackage默认只会加载配置文件 只有用到才会载入贴图、声音等资源。
//如果你需要提前全部载入所有资源 使用LoadAllAssets方法
teachPackage.LoadAllAssets();

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

8.2 知识点代码

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

public class Lesson08_FGUI基础_基础知识_使用发布的UI_加载包 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 导入UI资源
        //1.直接放在Resources或者其子目录下
        //2.打包进AB包中
        #endregion

        #region 知识点二 纹理设置注意事项

        #endregion

        #region 知识点三 更节约空间的分离Alpha通道的导出模式
        //在编辑器中导出时,在纹理集定义时 选择分离Alpha通道 可以更加节约空间
        #endregion

        #region 知识点四 加载UI包

        //方法一:从Resources加载

        //将导出的UI文件放入Resources目录或者其子目录下
        //使用FairyGUI提供的 API加载对应UI

        //AddPackage会先使用传入的路径作为key进行检测,如果这个包已经添加了 不会重复添加
        //直接填写包名即可 不需要加_fui
        UIPackage teachPackage = UIPackage.AddPackage("UI/FGUI教程");
        //遍历当前包的所以依赖包 可以获得依赖包相关信息
        foreach (var item in teachPackage.dependencies)
        {
            //item["name"]可以获取到 依赖包的名字  可以遍历加载所有依赖包
            UIPackage.AddPackage(item["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);

        #endregion

        #region 知识点五 卸载UI包
        //当一个包不在使用时,可以卸载
        //包卸载后,所有包里的贴图等资源均会被卸载,创建出来的组件也无法显示
        //一般不建议包进行频繁装载卸载,因为每次装载卸载必然是要消耗CPU时间(意味着耗电)和产生大量GC的。
        //UI系统占用的内存是可以精确估算的,你可以按照包的使用频率设定哪些包是常驻内存的(建议尽量多的包常驻)。

        //卸载指定包
        UIPackage.RemovePackage("FGUI教程");

        //卸载所有包
        UIPackage.RemoveAllPackages();
        #endregion

        #region 知识点六 包内存管理

        //AddPackage默认只会加载配置文件 只有用到才会载入贴图、声音等资源。
        //如果你需要提前全部载入所有资源 使用LoadAllAssets方法
        teachPackage.LoadAllAssets();

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

        #endregion
    }
}


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

×

喜欢就点赞,疼爱就打赏