现有一个UI框架,框架的BasePanel类不继承自MonoBehaviour,如果要显示一个面板,可以直接new出来。我们都知道,继承MonoBehaviour的类是不可以使用new方法来创建类的实例化对象的。那么,如果有一个面板,比如滑动列表,需要实时更新,怎么实现呢?
可以在GameManager里创建一个委托
1)可以使用内置委托Action来实现
using System;
public Action NonMonoUpdateMethod; //声明一个无参、无返回值的委托类型
void Update()
{
if(NonMonoUpdateMethod!=null)
NonMonoUpdateMethod();
}
然后在Panel类里将方法传递给委托
GameManager.instance.NonMonoUpdateMethod = CheckShowOrHide;
此外,也可以使用delegate的自定义委托来实现
public delegate void Weituo(); //声明一个名为Weituo的委托类型,无参数,无返回值
public Weituo MethodField; //声明一个Weituo类型的委托实例
void Update()
{
if(MethodField != null) //如果委托实例指向了一个方法
MethodField(); //将参数传递给委托(此处无参)并调用委托所指向的方法
}
GameManager.instance.MethodField = CheckShowOrHide; //传入一个无参方法