基本的delegate代码如下:
public class Delegate : MonoBehaviour
{
public delegate void NumDelegate(int args);
public NumDelegate numDelegate;
// Start is called before the first frame update
void Start()
{
numDelegate = printNum;
numDelegate(4);
numDelegate += printMultiNum;//多播multicasting
numDelegate(4);
}
public void printNum(int num)
{
print("Value of Num:" + num);
}
public void printMultiNum(int num)
{
print("Value of Num:" + num * 5);
}
}
在unity中的显示如下:
现在提出一个需求:在unity界面上,显示三个按钮,分别显示:数字本身,数字的5倍 以及 “数字本身和数字的5倍”
将之前的代码稍稍改变,加入OnGUI()
public class Delegate : MonoBehaviour
{
public delegate void NumDelegate(int args);
public NumDelegate numDelegate;
private void OnGUI()
{
if (GUILayout.Button("显示数字本身"))
{
//只显示数字,所以numDelegate委托给printNum
numDelegate = printNum;
numDelegate(4);
}
else if (GUILayout.Button("显示数字的5倍"))
{
//只显示数字,所以numDelegate委托给printNum
numDelegate = printMultiNum;//多播
numDelegate(4);
}
else if (GUILayout.Button("显示数字本身和数字的5倍"))
{
//需要显示数字和其5倍的数 ,所以numDelegate多播给printNum和printMultiNum
numDelegate = printNum;
numDelegate += printMultiNum;//多播
numDelegate(4);
}
}
public void printNum(int num)
{
print("Value of Num:" + num);
}
public void printMultiNum(int num)
{
print("Value of Num:" + num * 5);
}
在unity上的效果演示:
通过以上最简单的实例,我认为可以很好的理解委托的作用