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