Skip to the content.

视图管理

目录

介绍

Zero提供了了一套视图管理解决方案,在该方案下,开发者可以方便的管理界面上的元素。该视图管理方案是Zero的核心之一,建议所有使用Zero框架的项目都使用视图管理模块来进行开发。

AView

为了要最大限度的利用代码热更,所以我们的代码都不能继承MonoBehaviour。但是我们又要对GameObject进行管理,于是Zero提供了AView。

AView是一个抽象的视图包装器类,每一个AView都有一个关联的GameObject。所有的视图(Prefab)都需要一个对应的AView子类来对其进行管理。

生命周期
  1. OnInit(object data)
    初始化时触发,此时已关联GameObject。如果初始化时没有传入数据,则data为null。
  2. OnEnable
    GameObject的Active变为true时触发
  3. OnDisable
    GameObject的Active变为false时触发
  4. OnDestroy
    GameObject被销毁时触发
参数
设置Active
.
public void SetActive(bool isActive)
获取组件
public T GetComplent<T>()
获取子对象
public Transform GetChild(string childName)
public GameObject GetChildGameObject(string childName)
public T GetChildComplent<T>(string childName)
子视图创建
public T CreateChildView<T>(string childName, object data = null) where T:AView

每一个AView的子对象都可以用另一个AView对象去管理,通过该API可以将子GameObject通过用AView子类进行包装。

注意:当父AView对象销毁时,其下的所有子AView对象都会被销毁。

图层

所有的AView都应该在图层中被管理起来,Zero提供了两种类型的视图层,用来管理AView的显示。

单视图图层

SingularViewLayer

单一的视图层,该层中的视图,只能存在一个,视图之间的关系是切换。

Demo项目中基于该ViewLayer封装了UIPanelMgr以及StageMgr

多视图图层

PluralViewLayer

复数的视图层,该层中的视图,可以同时存在

Demo项目中基于该ViewLayer封装了UIWinMgr

捕获UI事件

UIEventListener

通过UIEventListener实现简单方便的UI事件捕获,其包括了大多数的UI事件,只需要注册对应的委托即可使用。

比如我们要对一个按钮图片进行点击事件捕获

UIEventListener.Get(btnTap).onClick += OnClickGo;
UIEventListener.Get(btnTap).onClick -= OnClickGo;

事件捕获优化

UIEventListener直接对对象捕获了多数UI事件,但是我们只想关注对象的单个事件时,可以用高效的更具体的事件捕获类。他们的使用方法和UIEventListener一致,只是事件类型单一。目前已有的有:

高效的不可见的响应UI事件的组件: TransparentRaycast

当我们需要在GameObject上放置一个透明的组件,用来响应UI事件时,可以使用TransparentRaycast.cs,他是一个透明的且优化过的UI组件。