UG4L9-6——控制器

本章代码关键字

1
2
3
4
5
6
7
8
9
Controller                            //控制器类
gComponent.GetController() //从组件上获取控制器
controller.selectedIndex //通过索引号设置切换控制器页签
controller.selectedPage //通过名字去切换控制器页签
GearBase.disableAllTweenEffect //关闭或开启切换页签带来的缓动效果
controller.SetSelectedIndex() //通过索引切换页签但不会触发事件的方法
controller.SetSelectedPage() //通过名字切换页签但不会触发事件的方法
controller.onChanged.Add() //控制器变化时监听
gObject.onGearStop.Add() //控制器控制的元件如果有缓动效果,缓动结束后事件监听

控制器

控制器是FairyGUI核心功能之一,它为UI制作中以下类似需求提供了支持

  1. 分页:一个组件可以由多个页面组成
  2. 按钮状态:按钮通常有按下、鼠标悬浮等多个状态,我们可以利用控制器为每个状态安排不同的显示内容
  3. 属性变化:利用控制器,我们可以使元件具有多个不同的形态,并且可以方便地切换

简单理解控制器,就是可以让一个组件有几种状态
我们可以在不同的状态内设置组件内元件的变化,来做到类似:面板切页,按钮状态变化等效果

控制器的创建

控制器在组件中进行创建,每一个组件都可以创建一个或多个控制器

image

点击增加控制器按钮后 弹出的窗口

image

  • 名称:同一组件中不要重名

  • 备注名:说明信息,用于帮助别人理解

  • 首页:控制器创建后的默认页面

    image

    • 第一页:索引为0的页面
    • 指定页面:可以指定某个页面
    • 匹配分支名称:跳转到名称和活跃分支名称相同的页面,具体效果可见:分支和控制器配合
    • 匹配变量名称:跳转到名称和指定变量值相同的页面(变量名称在项目设置中添加)
  • 导出为组件属性:勾选后,当组件在编辑器中使用时,这个控制器将显示在组件的自定义属性面板上

  • 自动调整单选组对象层次:勾选后,组件内所有属于此控制器控制的单选按钮,选中状态时会自动调整到其它按钮之前

  • 按钮控制器的模板

    image

    选择一种后,控制器名称自动变成button 会自动添加模板中包含的页面

  • 动作:动效相关,详见:控制器使用动效

控制器的属性

这样一组信息,表示一个控制器 c1是控制器的名字 后面的数字表示页面编号(可以理解一个页面就是它的一个状态)

image

  • 创建好控制器后,我们需要选中一个组件中的元件然后在右侧的属性控制面板中进行设置

    image

    • 我们可以在这里添加控制器能控制的内容

      image

在Unity中的使用

  1. 获取控制器

    1
    Controller controller = gComponent.GetController("myController");
  2. 控制器重要API

    • 通过索引号即可设置切换控制器页签

      1
      controller.selectedIndex = 1;
    • 通过名字去切换控制器页签

      1
      controller.selectedPage = "page2";
    • 关闭或开启切换页签带来的缓动效果,一般用于初始化时不希望播放缓动效果的情况

      1
      GearBase.disableAllTweenEffect = true;
    • 通过索引切换但不会触发事件的方式

      1
      controller.SetSelectedIndex(1);
    • 通过名字切换但不会触发事件的方式

      1
      controller.SetSelectedPage("page2");
  3. 控制器事件相关

    • 控制器变化时监听

      1
      2
      3
      4
      controller.onChanged.Add(() =>
      {
      print("切换了页签");
      });
    • 控制器控制的元件如果有缓动效果,缓动结束后事件监听

      如果元件有多个缓动,则这里的监听方法会被执行多次

      1
      2
      3
      4
      5
      GObject gObject = gComponent.GetChild("bk");
      gObject.onGearStop.Add(() =>
      {
      print("缓动结束");
      });

控制器联动

控制器可以和其它控件进行联动,什么是联动?
比如一个单选按钮的切换 会带来面板的切页

之后我们在讲解对应控件的时候 再进行深入讲解