Unity3D学习资源—委托和lambda表达式二
来源:互联网 发布:javascript是什么知乎 编辑:程序博客网 时间:2024/06/08 14:32
四.委托可以绑定多个方法这种特性,可以用在设计模式上面,下面有个Unity的一个Demo,先看一下截图:
工程运行前,场景中有四个带颜色的物体,中间是一个小球,然后移动小球,与四个物体中的任何一个碰撞后,再按下空格键,则把碰撞过的物体颜色改为蓝色.效果图如下:
其主要的思想就是在移动的小球的脚本里面,定义了一个委托,在其它四个物体的脚本里面都有一个方法,其格式和定义的委托格式一样,当移动的小球与四个物体碰撞后,就把物体脚本组件里面的方法与移动小球脚本组件里面的委托变量相绑定,当按下空格键后,就执行委托所绑定 的方法,把相对应的物体的颜色改变即可.下面是代码:
代码一是绑定在四个带有颜色物体上的脚本组件
下面两个脚本是加到移动小球上面的:
以下是Unity场景里面的各物体之间的父子关系图:
以上就是关于委托的应用,由于书写时间仓促,有什么问题还请各位大神多多指教.
工程运行前,场景中有四个带颜色的物体,中间是一个小球,然后移动小球,与四个物体中的任何一个碰撞后,再按下空格键,则把碰撞过的物体颜色改为蓝色.效果图如下:
其主要的思想就是在移动的小球的脚本里面,定义了一个委托,在其它四个物体的脚本里面都有一个方法,其格式和定义的委托格式一样,当移动的小球与四个物体碰撞后,就把物体脚本组件里面的方法与移动小球脚本组件里面的委托变量相绑定,当按下空格键后,就执行委托所绑定 的方法,把相对应的物体的颜色改变即可.下面是代码:
代码一是绑定在四个带有颜色物体上的脚本组件
[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 ();
}
}
}
以上就是关于委托的应用,由于书写时间仓促,有什么问题还请各位大神多多指教.
0 0
- Unity3D学习资源—委托和lambda表达式二
- Unity3D学习资源—委托和lambda表达式一
- c#委托和lambda表达式(二)
- 委托、Lambda表达式和事件
- 委托,Lambda表达式和事件
- 委托、Lambda表达式和事件
- 委托,lambda表达式和事件
- 委托、Lambda表达式和事件
- 委托、匿名委托和lambda表达式
- [深入学习C#]匿名函数、委托和Lambda表达式
- 学习笔记--委托,Lambda表达式和事件(1)
- 学习笔记--委托,Lambda表达式和事件(2)
- C#高级学习第二章委托,Lambda表达式和事件
- Java8学习:Lambda表达式、Stream API和功能性接口 — 教程、资源、书籍和实例
- 详解C#委托、时间和Lambda表达式
- 解析C#委托、时间和Lambda表达式
- 委托和匿名方法、lambda表达式
- C#中的委托和Lambda表达式
- 数组访问方式
- Android中Display及DisplayMetrics理解
- glog安装和使用方法
- java定时执行任务举例
- Android Android利用Fiddler进行网络数据抓包
- Unity3D学习资源—委托和lambda表达式二
- 建设顺序表算法库
- 简单理解——tableview的重用机制
- hi3518e音频G711调试笔记
- scrapy&mongodb基本使用
- nginx的安装与配置
- 【codevs1722】【NOI1997】最优乘车,单元最短路?
- poj 2386 Lake Counting 【dfs(模板)】
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令