Unity3D学习资源—委托和lambda表达式二

四.委托可以绑定多个方法这种特性,可以用在设计模式上面,下面有个Unity的一个Demo,先看一下截图:
 
工程运行前,场景中有四个带颜色的物体,中间是一个小球,然后移动小球,与四个物体中的任何一个碰撞后,再按下空格键,则把碰撞过的物体颜色改为蓝色.效果图如下:
 
其主要的思想就是在移动的小球的脚本里面,定义了一个委托,在其它四个物体的脚本里面都有一个方法,其格式和定义的委托格式一样,当移动的小球与四个物体碰撞后,就把物体脚本组件里面的方法与移动小球脚本组件里面的委托变量相绑定,当按下空格键后,就执行委托所绑定 的方法,把相对应的物体的颜色改变即可.下面是代码:
代码一是绑定在四个带有颜色物体上的脚本组件
[C]  纯文本查看  复制代码
?
1
2
3
4
5
6
7
8
9
public class EnemyHurt : MonoBehaviour
{
 
public void Hurt ()
{
//把物体材质的颜色变成黑色,代表已死亡
transform.renderer.material.color = Color.blue;
}
}
下面两个脚本是加到移动小球上面的:
[C]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
//此脚本是用来控制小球移动的
public class Move : MonoBehaviour
{
//小球移动的速度
public float speed = 3.0f;
 
void Update ()
{
//得到横竖虚拟轴的值
float hor = Input.GetAxis ( "Horizontal" );
float vec = Input.GetAxis ( "Vertical" );
//小球的移动
transform.position += new Vector3 (hor, 0, vec) * Time.deltaTime * speed;
}
}

[C]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Boom : MonoBehaviour
{
//由于四个物体上带的方法是无参无返回值,所以声明一个委托时要和方法的格式一样
public delegate void BoomEvent ();
//委托变量
public BoomEvent boomevent;
//碰撞检测,当小球与四个物体发生碰撞时,
void OnCollisionEnter (Collision other)
{
//如果碰撞物体的父物体不为空并且父物体的名字是Enemies时
if (other.transform.parent != null && other.transform.parent.name == "Enemies" ) {
//把委托变量与碰到物体的脚本组件里面的方法相绑定
boomevent += other.transform.GetComponent<EnemyHurt> ().Hurt;
}
}
// Update is called once per frame
void Update ()
{
//当按下空格键时,执行委托方法
if (Input.GetKeyDown (KeyCode.Space)) {
boomevent ();
}
}
}
以下是Unity场景里面的各物体之间的父子关系图:
 
以上就是关于委托的应用,由于书写时间仓促,有什么问题还请各位大神多多指教.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值