1.引入:
常用的两种为Button添加事件的方法:
1.写一个public函数,然后将该脚本挂载到一个物体上,然后拖拽到button的onclick组件上。
2.声明一个button变量,在inspector面板将要添加事件的button赋值给button,然后再在脚本里面button.onClick.AddListener(SayNewGame)
如果直接这样写的话有两种弊端:
1.容易拖拽错误
2.如果该面板组件很多的话会很麻烦,比如我们有20个button,就需要声明20个button变量,用的时候也非常难以找到。
这个时候,我们可以写一个UI基类,然后创建一个脚本继承自该类,挂载到Panel上,使其对该Panel下的所有组件进行管理。
2.主要思路
为了使继承自该基类的Panel脚本能够轻松的获取到该面板下的任何的组件,我们可以统一的把所有组件存放起来,为了区分是哪个子物体的组件,可以用字典的形式,即:
Dictionary<string, UIBehaviour> dic = new Dictionary<string, UIBehaviour>();
注意:所有的UI组件均继承于UIBehaviour
但这样存放会产生一个问题:
一个物体上往往不止一个UI组件,这样存放会造成键的重复,这是不允许的,比如有个Button物体,它身上有image组件和Button组件,在存放的时候就会造成“Button-image”、“Button-Button”的键重复错误,为了解决这样的问题,我们使用下面的形式:
Dictionary<string, List<UIBehaviour>> dic = new Dictionary<string, List<UIBehaviour>>();
即用一个list来存放一个物体下的所有组件。
接下来,就可以该Panel下获取所有组件进行存放(panel下的物体的组件有哪些类型参数填哪些类型):
/// <summary>
/// 获取该类型的所有组件,添加到字典中
/// </summary>
/// <typeparam name="T"></typeparam>
void GetUIComponent<T>() where T: UIBehaviour
{
if(dic == null)
{
return;
}
T[] ts =