unity 3D经常需要设计到不同object之间数据通信和事件信息触发。这里可以利用C#本身的事件和代理的方法来实现。

这里实现了在GUI上点击按钮,触发事件,移动object cube移动的例子。

Main Camera 挂载实现GUI的 Label.cs脚本

Cube挂载 Cube.cs脚本

Label.cs

using UnityEngine;
using System; // 声明物体移动代理类型
public delegate void EventObjectMoveDelegate(Vector3 dirct); public class Label : MonoBehaviour { private Rect windowRect;
public event EventObjectMoveDelegate cubeMove; void Start()
{
windowRect = new Rect(20, 20, 200, 300);
} // Update is called once per frame
void Update()
{ } void OnGUI()
{
windowRect = GUI.Window(0, windowRect, Mywindowfunc, "windows");
} void Mywindowfunc(int windowId)
{
if (GUI.Button(new Rect(10, 20, 100, 20), "moveUp"))
{
if (null != cubeMove)
{
cubeMove(Vector3.up);
}
} if (GUI.Button(new Rect(10, 50, 100, 20), "moveDown"))
{
if (null != cubeMove)
{
cubeMove(Vector3.down);
}
} if (GUI.Button(new Rect(10, 80, 100, 20), "moveLeft"))
{
if (null != cubeMove)
{
cubeMove(Vector3.left);
}
} if (GUI.Button(new Rect(10, 110, 100, 20), "moveRight"))
{
if (null != cubeMove)
{
cubeMove(Vector3.right);
}
} GUI.DragWindow(new Rect(0, 0, 10000, 1000));
}
}

cube.cs

using UnityEngine;
using System.Collections;
using System; public class cube : MonoBehaviour { // Use this for initialization
void Start () { GameObject.Find("Main Camera").GetComponent<Label>().cubeMove += cubeMoveHandler;
} // Update is called once per frame
void Update () { } void cubeMoveHandler(Vector3 dirct)
{
transform.Translate(dirct);
}
}

代码地址:

https://github.com/caimagic/Unity_Object_Commucation_With_Delegate.git

unity中object 对象之间用c# delegate方式进行通信的更多相关文章

  1. JAVA中JavaBean对象之间属性拷贝的方法

    JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...

  2. Unity编程标准导引-3.4 Unity中的对象池

    本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan Unity编程标准导引-3.4 Unity中的对象池 本节通过一个简单的射击子弹的示例来介绍T ...

  3. JAVA中JavaBean对象之间拷贝的方法

    JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,有个更简便的方法,他们之间的拷贝可以通过copyPro ...

  4. JavaScript中各种对象之间的关系

    上图: 此外,补充一下图中用到的概念: 1.内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集:而后者包括了一些在运行过程中动 ...

  5. js 中object对象的操作

    n = object对象 for(var p in n){ console.log(p);// 取得是key值 console.log(n[p]);//取得是value值 } 继之前js中数组的常用方 ...

  6. ES6中object对象属性

    //////es5中定义对象属性要么字面量.要么点.要么[],变量与空格在这些方法中没有得到好的支持 /////在es6中可以这么定义: let w='www'; let obj1={w};//obj ...

  7. 【Unity】Unity中资源动态载入的两种方式之AssetsBundle

    首先要说的是,我们的project中有2个脚本.各自是: Build(编辑器类脚本.无需挂载到不论什么物体).可是必需要把Build脚本放到Editor目录中 Load脚本,挂载到摄像机上<pr ...

  8. javascript中的对象之间继承关系

    相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应,这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达式的不同了,最让我们头疼,恐怕就是面向对象 ...

  9. 谈谈Activiti中流程对象之间的关系

    详细见:http://www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html (咖啡兔好牛!) 详细见: http://blo ...

随机推荐

  1. 关于wordpress后台首页加载ajax.googleapis特别慢的解决办法

    通过审查元素发现,拖慢后台加载速度的主要是两个路径 1.https://ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js 2.h ...

  2. akoj-1153-p次方求和

    p次方求和 Time Limit:1000MS  Memory Limit:65536K Total Submit:196 Accepted:46 Description 一个很简单的问题,求1^p+ ...

  3. Linux Command Line(I): Beginner

    考試月終於暫告一段落,終於有時間回歸Linux 的懷抱.不知怎的,在VMware Workstation 12 上登入Ubuntu後總是blue screen,明明昨天用terminal 也沒有事啊真 ...

  4. Mybatis源码分析-BaseExecutor

    根据前文Mybatis源码分析-SqlSessionTemplate的简单分析,对于SqlSession的CURD操作都需要经过Executor接口的update/query方法,本文将分析下Base ...

  5. MySQL数据库IO问题

    --MySQL数据库IO问题 ----------------------2014/05/25     看http://www.mysqlperformanceblog.com 的时候,发现Perco ...

  6. Netty笔记——技术点汇总

    目录 · Linux网络IO模型 · 文件描述符 · 阻塞IO模型 · 非阻塞IO模型 · IO复用模型 · 信号驱动IO模型 · 异步IO模型 · BIO编程 · 伪异步IO编程 · NIO编程 · ...

  7. Go语言数组的使用

    Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...

  8. js中callback.call()和callback()的区别

    js中callback.call()和callback()的区别在js中callback.call()和callback() 有什么区别,举个例子:function a(){alert('hello! ...

  9. git 生成公钥、私钥方法与clone使用方法

    我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...

  10. 【SQL*PLUS】常规使用

    登陆SQL*PLUS sqlplus sys/Manager123 as sysdba 创建数据库实例并挂载数据库,此时加载数据库文件,但数据表不能访问. SQL>startup mount; ...