UG4L8-6——装载器

本章代码关键字

1
2
3
4
5
6
7
GLoader                                    //装载器类
gObject.asLoader //将元件对象as成装载器对象返回
gLoader.url //装载器所用的资源的url
gLoader.movieClip //获取装载器装载的动画或者图片
gLoader.component //获取装载器装载的组件
gLoader.texture //装载Unity的贴图的属性
UIObjectFactory.SetLoaderExtension() //注册拥有自定义加载方法的GLoader派生类

装载器

为了节约性能提升效率,FairyGUI的图片是不能够动态修改资源的
而装载器的用途就是动态载入资源,我们可以使用装载器来动态的改变图片

装载器可以装载:图片、动画、组件

如何创建装载器

  1. 左侧选择装载器图标,在舞台上进行创建

    image

  2. 选择想要变成装载器的元件右键,点击替换元件选择装载器

    image

装载器相关属性

image

  • URL:资源路径(图片、动画、组件)

  • 发布时清除:如果选中该选项,发布时会自动清空这里设置的值

    image

  • 自动大小:如果选中该选项,则装载器的尺寸会自动适配图片大小
    选中该选项,则下面的填充处理选项没有意义

  • 填充处理

    image

    • 无 :内容不会发生任何缩放。
    • 等比缩放(显示全部):按照最小比率缩放,不变形,一边可能留空白。
    • 等比缩放(无边框) :按照最大比率缩放,不变形,一边可能超出装载器矩形范围。
    • 等比缩放(适应高度): 内容高度占满装载器高度,宽度等比缩放。
    • 等比缩放(适应宽度) :内容宽度占满装载器宽度,高度等比缩放。
    • 自由缩放: 内容缩放至占满装载器矩形范围,不保持比例。
    • 注意:如果设置了自动大小,那么填充处理没有任何意义了
  • 仅允许缩小:勾选后,处理填充处理时,其中的内容永远不被放大,但可以被缩小

  • 帧:如果是动画,可以设置当前帧,如果是图片,没有任何意义

在Unity中使用

  1. 获取装载器

    1
    GLoader gLoader = view.GetChild("loader1").asLoader;
  2. 加载包中或者Resource的资源

    1
    2
    3
    4
    //加载包中的资源
    gLoader.url = "ui://teach/ui_TY_biaotilan_01";
    //通过内部帮助我们加载Resources加载资源
    gLoader.url = "UI/bk";
  3. 动态创建装载器

    1
    2
    3
    4
    5
    GLoader loader = new GLoader();
    loader.SetSize(100, 100);
    loader.y = 400;
    loader.url = "ui://teach/MovieClip1";
    view.AddChild(loader);
  4. 获取装载器中的内容

    如果是图片和动画,通过gLoader.movieClip​获取,图片就是动画第一帧
    如果是组件,通过gLoader.component​获取

    1
    2
    MovieClip movie = gLoader.movieClip;
    GComponent component = gLoader.component;
  5. 装载Unity贴图

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public Texture t;

    void Start()
    {
    //设置适配相关
    GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatc
    //包与依赖包的加载
    UIPackage package = UIPackage.AddPackage("UI/teach");
    foreach (var item in package.dependencies)
    {
    UIPackage.AddPackage(item["name"]);
    }
    GComponent view = UIPackage.CreateObject("teach", "TeachPanel").asCom;
    GRoot.inst.AddChild(view);

    GLoader gLoader = view.GetChild("loader1").asLoader;
    gLoader.texture = new NTexture(t);
    }
  6. 自定义加载方案

    首先需要声明一个继承GLoader​的派生类,在里面重写加载资源LoadExternal()​以及释放资源FreeExternal()​的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //自定义加载方案
    public class MyGLoader : GLoader
    {
    //重写加载资源的方法
    protected override void LoadExternal()
    {
    //自定义加载方式
    Sprite s = null; //假设你自己写了一些加载的规则
    NTexture texture = new NTexture(s); //假设这是加载成功的一张图
    //如果加载成功,需要执行这个方法,并将加载成功的图片传进去
    onExternalLoadSuccess(texture);
    //如果加载失败,需要执行这个方法
    onExternalLoadFailed();
    }

    protected override void FreeExternal(NTexture texture)
    {
    //释放外部载入资源的逻辑
    }
    }

    再注册该派生类,传入该派生类的类型,之后所有的装载器都将使用自定义的方法

    1
    UIObjectFactory.SetLoaderExtension(typeof(MyGLoader));