开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2006

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1421|回复: 147

[jskymoon] 无需进行装箱/拆箱的【事件管理器】

  [复制链接]  [移动端链接]
排名
3760
昨日变化
16

8

主题

121

帖子

1523

积分

Rank: 9Rank: 9Rank: 9

UID
85548
好友
5
蛮牛币
1744
威望
0
注册时间
2015-3-27
在线时间
898 小时
最后登录
2017-12-13

专栏作家活力之星

发表于 2017-11-28 16:33:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 jskymoon 于 2017-11-29 14:50 编辑

装箱/拆箱
为了解释“为什么不用object传递参数?”先简单介绍一下“装箱/拆箱”,请看下面代码:
[C#] 纯文本查看 复制代码
int a = 10;
object b = a; //装箱
a = (int)b; //拆箱

第二行,会在堆上实例化一个装箱的对象,并把a的值复制进去,b 引用的就是这个对象。
第三行,会再次进行值复制,若 b 不再引用,则需等待垃圾回收。


常见的事件管理器
我们看一些常见的事件管理器使用代码:
[C#] 纯文本查看 复制代码
void Start()
{
    //注册事件
    EventManager.AddEventListener("Click", OnClick);
}

public void OnClick(object data)
{
    Debug.Log("clickBlock: " + data);
}

//派发事件
EventManager.dispatchEvent("Click", 123);

如上所述,若传递的是引用类型则不会有影响。但如果传递的是值类型,就会产生上述的性能消耗


泛型优化
我们可以通过泛型去设置参数的类型,从而不需要通过 object 类型传递参数:
[C#] 纯文本查看 复制代码
public void Dispatch<T1, T2, T3, T4>(string evt, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
    Delegate[] methods = GetMethods(evt);
    if (methods != null)
    {
        foreach (Delegate m in methods)
        {
            try
            {
                ((Action<T1, T2, T3, T4>)m)(arg1, arg2, arg3, arg4);
            }
            catch (Exception e) { LogError(e); }
        }
    }
}


将上面的代码,改为用泛型事件管理器:
[C#] 纯文本查看 复制代码
void Start()
{
    //注册事件
    EventDispatcher.global.AddListener<int>("Click", OnClick);
}

public void OnClick(int data)
{
    Debug.Log("clickBlock: " + data);
}

//派发事件
EventDispatcher.global.Dispatch<int>("Click", 123);


另:该事件管理器还支持【继承】与【实例化】,因此可以在非脚本对象和派生自MonoBehaviour的实例中使用。

完整代码:
游客,如果您要查看本帖隐藏内容请回复

若您发现其中有问题或任何优化意见,请在本帖留言或私信我,谢谢大家~


评分

参与人数 2鲜花 +4 收起 理由
jasonatum + 2 思想不错,Unity的拆箱装箱操作产生的内存.
尹华南 + 2 很给力!

查看全部评分


回复

使用道具 举报

7日久生情
2156/5000
排名
428
昨日变化
1

5

主题

153

帖子

2156

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
9957
好友
1
蛮牛币
2906
威望
0
注册时间
2013-12-9
在线时间
656 小时
最后登录
2017-12-11
QQ
发表于 2017-11-28 18:53:55 | 显示全部楼层
看看 先

评分

参与人数 1蛮牛币 +10 收起 理由
jskymoon + 10 感谢反馈问题~

查看全部评分


回复

使用道具 举报

4四处流浪
306/500
排名
8393
昨日变化
83

0

主题

106

帖子

306

积分

Rank: 4

UID
228538
好友
2
蛮牛币
400
威望
0
注册时间
2017-6-24
在线时间
88 小时
最后登录
2017-12-13
发表于 2017-11-28 19:17:21 | 显示全部楼层
感谢分享

回复

使用道具 举报

7日久生情
1525/5000
排名
5628
昨日变化
46

2

主题

1119

帖子

1525

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
241666
好友
0
蛮牛币
6002
威望
0
注册时间
2017-9-6
在线时间
208 小时
最后登录
2017-12-13
发表于 2017-11-29 07:13:29 来自Mobile--- | 显示全部楼层
感谢分享

回复

使用道具 举报

3偶尔光临
227/300
排名
8986
昨日变化
8

3

主题

51

帖子

227

积分

Rank: 3Rank: 3Rank: 3

UID
245484
好友
0
蛮牛币
384
威望
0
注册时间
2017-9-22
在线时间
75 小时
最后登录
2017-12-2
发表于 2017-11-29 09:11:58 | 显示全部楼层
感谢分享 真的不错的

回复 支持 反对

使用道具 举报

3偶尔光临
198/300
排名
11571
昨日变化
9

1

主题

58

帖子

198

积分

Rank: 3Rank: 3Rank: 3

UID
252095
好友
1
蛮牛币
135
威望
0
注册时间
2017-11-2
在线时间
75 小时
最后登录
2017-12-13
发表于 2017-11-29 09:13:42 | 显示全部楼层
学习到了

回复

使用道具 举报

3偶尔光临
181/300
排名
11387
昨日变化
175

0

主题

73

帖子

181

积分

Rank: 3Rank: 3Rank: 3

UID
243239
好友
0
蛮牛币
294
威望
0
注册时间
2017-9-13
在线时间
42 小时
最后登录
2017-12-13
发表于 2017-11-29 09:49:38 | 显示全部楼层
666666666666666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
3505/5000
排名
105
昨日变化

2

主题

156

帖子

3505

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
11741
好友
1
蛮牛币
6984
威望
0
注册时间
2014-1-3
在线时间
1281 小时
最后登录
2017-12-13
QQ
发表于 2017-11-29 11:13:47 | 显示全部楼层
666666666666666

回复 支持 反对

使用道具 举报

排名
279
昨日变化

24

主题

407

帖子

3106

积分

Rank: 9Rank: 9Rank: 9

UID
10602
好友
15
蛮牛币
6320
威望
0
注册时间
2013-12-18
在线时间
885 小时
最后登录
2017-12-8

专栏作家认证开发者

发表于 2017-11-29 11:36:45 | 显示全部楼层
看看6不6啊啊啊

回复

使用道具 举报

4四处流浪
455/500
排名
9203
昨日变化
7

7

主题

79

帖子

455

积分

Rank: 4

UID
58686
好友
1
蛮牛币
217
威望
0
注册时间
2014-12-1
在线时间
275 小时
最后登录
2017-12-13
发表于 2017-11-29 12:05:54 | 显示全部楼层
我来瞅瞅

回复

使用道具 举报

5熟悉之中
911/1000
排名
3088
昨日变化
11

2

主题

105

帖子

911

积分

Rank: 5Rank: 5

UID
161991
好友
2
蛮牛币
110
威望
0
注册时间
2016-8-12
在线时间
420 小时
最后登录
2017-12-13
发表于 2017-11-29 12:21:59 | 显示全部楼层
无需进行装箱/拆箱的【事件管理器】 [修改]

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1420/1500
排名
2352
昨日变化
10

0

主题

97

帖子

1420

积分

Rank: 6Rank: 6Rank: 6

UID
19670
好友
0
蛮牛币
2001
威望
0
注册时间
2014-3-31
在线时间
829 小时
最后登录
2017-12-13
发表于 2017-11-29 12:36:13 | 显示全部楼层
看看怎么用的。

回复

使用道具 举报

7日久生情
3280/5000
排名
4934
昨日变化
36

4

主题

2740

帖子

3280

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
209186
好友
5
蛮牛币
3787
威望
0
注册时间
2017-3-1
在线时间
306 小时
最后登录
2017-12-13
发表于 2017-11-29 13:53:41 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
4325/5000
排名
50
昨日变化

0

主题

282

帖子

4325

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
14133
好友
0
蛮牛币
5086
威望
0
注册时间
2014-2-12
在线时间
1681 小时
最后登录
2017-12-13
发表于 2017-11-29 14:07:25 | 显示全部楼层
看看是个好资源。

回复

使用道具 举报

排名
54045
昨日变化
332

0

主题

1

帖子

11

积分

Rank: 1

UID
256465
好友
0
蛮牛币
23
威望
0
注册时间
2017-11-27
在线时间
9 小时
最后登录
2017-12-12
发表于 2017-11-29 14:13:43 | 显示全部楼层
122321223212232122321223212232

回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表