Unity UI层级管理框架

本文介绍了在Unity中由于UI界面复杂,面板和控件众多,导致事件管理繁琐的问题。作者提出了一种UI层级管理框架,通过使用OnTriggerEvent.cs脚本实现控件事件的集中管理,创建单例进行全局控制,简化了UI的初始化和事件监听过程,提高了代码的可维护性和扩展性。

1.为什么要使用UI层级管理框架?

根据我个人写的UI层级总结出:在一般UI界面的 Canvas 下有多个Panel,每个Panel下又有很多个需要操作的控件(Image、Text、inputField、Button)等,

因此要去管理如此多的事件处理非常繁琐,UI的层级结构刚好适合用一套框架来管理 :Canvas--->Panel--->(控件)

例:



第一步:给需要监听鼠标事件的控件添加监听脚本

用一个脚本代替 控件在Inspector中留下的OnClick方法(例:Button的OnClick需要去在脚本中寻找相对应的方法,如果脚本多了,寻找方法困难,而且不利于扩展)

因此我用了一个 OnTriggerEvent.cs 的脚本来执行相应的点击事件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class OnTriggerEvent : EventTrigger {
    //通过委托事件让UIScene来分配事件
    public delegate void ClickListener();
    public event ClickListener onBeginDrag;
    public event ClickListener onDrag;
    public event ClickListener onEndDrag;
Unity中,UI层级的分布管理可从多方面入手。在渲染层级上,其优先级依次由相机深度、Canvas的Sorting Layer、Canvas的Order in layer以及UI节点的层级来确定 [^2]。 相机深度可通过Camera控件中的Depth属性设置,值越大的相机后渲染,也就是该相机渲染的内容会显示在上层 [^2]。例如,有两个相机,一个Depth为0,另一个为1,那么Depth为1的相机渲染的内容会覆盖在Depth为0的相机渲染内容之上。 Canvas的Sorting Layer也是重要的层级管理因素,越靠下的Sorting Layer后渲染 [^2]。可在Canvas组件的Sorting Layer属性中进行设置,从而调整不同Canvas的显示层级。 当处于同一个Sorting Layer时,Canvas的Order in layer发挥作用,值越大越后渲染 [^2]。在开发中,可通过代码动态修改该值来改变UI元素的显示顺序,如: ```csharp using UnityEngine; using UnityEngine.UI; public class ChangeCanvasOrder : MonoBehaviour { public Canvas targetCanvas; void Start() { targetCanvas.sortingOrder = 1; } } ``` UI节点的层级同样影响显示效果,在Unity的Hierarchy层级面板中,层级在下的会遮挡住层级在上的UI视图 [^2][^3]。可直接在Hierarchy面板中拖动UI元素来调整其层级顺序。 对于粒子特效和spine动画,其层级处理与UI元素有差异,spine动画的层级在不同的设置模式下可能与UI元素相同也可能不同,需根据具体设置来管理 [^2]。 此外,还可使用层级管理框架来辅助管理。例如以下的单例框架: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; public class UIPanel<T> : MonoBehaviour where T : Component { private static T target; public static T Instance { get { target = GameObject.FindObjectOfType(typeof(T)) as T; if (target == null) { GameObject go = new GameObject(); target = go.AddComponent<T>(); } return target; } } } ``` UIManager可继承这个单例,方便使用 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值