- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
 
- 纳金币
- 52352
- 精华
- 343
|
在学习C#的时候,避免不了会接触到委托,事件,匿名函数之类的东西。一般情况下我们会这样写(UGUI为例)- using unityEngine;
- using System.Collections;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- using UnityEngine.Events;
- public class Tsttt : MonoBehaviour {
- public Button btOK;
- public Button btCancel;
-
- void Start () {
- btOK.onClick.AddListener(this.onClick_BtOK);
- btCancel.onClick.AddListener(this.onClick_BtCancel);
- }
- private void onClick_BtOK()
- {
- Debug.Log("Clicked OK");
- }
- private void onClick_BtCancel()
- {
- Debug.Log("Clicked Cancel");
- }
- void Update () {
-
- }
- }
复制代码 一个按钮的事件对应一个方法,很清晰明白。有点像WinForm里面的控件的事件函数,两个是很像。
但是有时候我们有批量操作按钮事件的需求,这种方式就不太适用了。我们可以使用匿名函数,实现
这个功能。- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- using UnityEngine.Events;
- public class Tsttt : MonoBehaviour {
- public struct Weapon
- {
- public string name;
- public int damage;
- }
- public Weapon[] weaponInfos;
- public Button[] btWeapons;
-
- void Start () {
- for (int i = 0; i < btWeapons.Length; i++)
- {
- btWeapons[i].onClick.AddListener(() =>
- {
- this.OnClickBTWeapon(weaponInfos[i]);
- });
- }
- }
- /// <summary>
- /// 点击武器按钮后响应
- /// </summary>
- /// <param name="go">传入需要的参数</param>
- void OnClickBTWeapon(Weapon wp)
- {
- if (wp.name.ToLower().IndexOf("gun") >= 0)
- {
- //ShowDetailInfo
- }
- }
- void Update () {
-
- }
- }
复制代码 可以看出来,在方法内使用匿名委托是很方便传参的。仔细对比一下上下的两种写法,多用用就能体会到其中的好处了。不过
在游戏里面也有不适用的地方,方便不方便也得区别对待,视情况而定。 |
|