您的位置:首页 > 移动开发 > Unity3D

Unity中用到的C#补充(七)- 委托与事件

2015-11-16 22:55 429 查看

1.事件的定义

声明事件委托。

声明事件。

添加事件的触发方法。

添加事件的处理程序(响应事件的方法)。

将指定的事件处理程序邦定到要处理的事件上(订阅事件)。

用户信息操作,并触发事件(调用事件的触发方法)。

通过事件委托的回调,执行我们需要的事件处理程序。

2.简单示例

using System;

namespace ConsoleApplication1
{
class Program
{
public delegate void MyDelegate();//声明事件委托
public static event MyDelegate MyEvent;//声明事件

static void Main(string[] args)
{
TestEvent myClass = new TestEvent();//这里构造类时先调用了TestEvent中的事件订阅
MyEvent += TestDelegate1; //订阅事件

OnTestEvent();
Console.ReadKey();
}

//事件触发方法 static 是为了能在Main中调用
static void OnTestEvent()
{
if (MyEvent != null)
MyEvent();
}

//定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
static void TestDelegate1()
{
Console.WriteLine("委托事件1");
}
}

public class TestEvent
{
public TestEvent()
{
Program.MyEvent += TestDelegate2;//订阅事件
}
//定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
public void TestDelegate2()
{
Console.WriteLine("委托事件2");
}
}
}


结果:



3.Unity 中的应用示例

unity 中玩家穿脱装备引起的属性变化

using UnityEngine;
using System.Collections;

//该类负责UI界面中人物血条的更新
public class UIHpClass
{
//绑定事件
public void AddEventListener()
{
T_005_Event_Test.OnInventoryChangeEvent += UpdateHp;
}
public void UpdateHp()
{
Debug.Log("更新人物血量显示");
}
}
//该类负责UI界面中人物属性面板的数值更新
public class UIPlayerProperty
{
//绑定事件
public void AddEventListener()
{
T_005_Event_Test.OnInventoryChangeEvent += UpdateProperty;
}
public void UpdateProperty()
{
Debug.Log("更新人物属性面板的数值显示");
}
}

//该类负责记录人物信息,并将人物信息上传至数据库
public class PlayerInfo
{
//绑定事件
public void AddEventListener()
{
T_005_Event_Test.OnInventoryChangeEvent += UpdatePlayerInfo;
}
//更新数据库中人物信息
public void UpdatePlayerInfo()
{
Debug.Log("人物信息更新,已上传至数据库");
}
}
public class T_005_Event_Test : MonoBehaviour
{
public delegate void OnInventoryChangeDalegate();//声明事件委托
public static event OnInventoryChangeDalegate OnInventoryChangeEvent;//声明事件
void Awake()
{
PlayerInfo palyerInfo = new PlayerInfo();
palyerInfo.AddEventListener();
UIHpClass uiHp = new UIHpClass();
uiHp.AddEventListener();
UIPlayerProperty playerProperty = new UIPlayerProperty();
playerProperty.AddEventListener();
}
void Start()
{
PlayerChangeEquip(true,"龙鳞宝刀");
}
//控制玩家穿上/脱下装备
public void PlayerChangeEquip(bool isEquip,string message)
{
if (isEquip)
Debug.Log("玩家穿上装备: " + message);
else
Debug.Log("玩家脱下装备: " + message);

//只要人物穿上/脱下装备,我们就通过OnInventoryChangeEvent事件去更新人物信息及UI界面的数据显示
OnInventoryChangeEvent();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: