unity中object 对象之间用c# delegate方式进行通信
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方式进行通信的更多相关文章
- JAVA中JavaBean对象之间属性拷贝的方法
JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...
- Unity编程标准导引-3.4 Unity中的对象池
本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan Unity编程标准导引-3.4 Unity中的对象池 本节通过一个简单的射击子弹的示例来介绍T ...
- JAVA中JavaBean对象之间拷贝的方法
JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,有个更简便的方法,他们之间的拷贝可以通过copyPro ...
- JavaScript中各种对象之间的关系
上图: 此外,补充一下图中用到的概念: 1.内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段就被创建好的对象,是后者的一个子集:而后者包括了一些在运行过程中动 ...
- js 中object对象的操作
n = object对象 for(var p in n){ console.log(p);// 取得是key值 console.log(n[p]);//取得是value值 } 继之前js中数组的常用方 ...
- ES6中object对象属性
//////es5中定义对象属性要么字面量.要么点.要么[],变量与空格在这些方法中没有得到好的支持 /////在es6中可以这么定义: let w='www'; let obj1={w};//obj ...
- 【Unity】Unity中资源动态载入的两种方式之AssetsBundle
首先要说的是,我们的project中有2个脚本.各自是: Build(编辑器类脚本.无需挂载到不论什么物体).可是必需要把Build脚本放到Editor目录中 Load脚本,挂载到摄像机上<pr ...
- javascript中的对象之间继承关系
相信每个学习过其他语言的同学再去学习JavaScript时就会感觉到诸多的不适应,这真是一个颠覆我们以前的编程思想的一门语言,先不要说它的各种数据类型以及表达式的不同了,最让我们头疼,恐怕就是面向对象 ...
- 谈谈Activiti中流程对象之间的关系
详细见:http://www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html (咖啡兔好牛!) 详细见: http://blo ...
随机推荐
- python编程基础知识—字典
字典 在python中,字典是一系列键-值对,每个键都与一个值相关联,可使用键来访问相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典,即可将任何python对象用在字典中的值. 在pytho ...
- MySQL数据库—日期与时间函数
一. 日期和时间函数 函数的概念:按指定格式输入参数,返回正确结果的运算单元 1. 返回当前日期:curdate() current_date() current_date()+0可以将当前日期转换为 ...
- 【物联网云端对接-2】通过MQTT协议与阿里云物联网套件进行云端通信
在<程序员>杂志2017.4刊上,曾写过一篇<微软百度阿里三大物联网平台探析>,上面曾介绍了阿里云物联网套件的一些内容,在写该篇文章的时候,凌霄物联网网关还无法对接到此平台( ...
- 有返回值的函数,如果包含try/catch块,经常会出现没有return的错误
public static Connection getConnection(){ try { return datasource.getConnection(); } catch (SQLExcep ...
- 使用requests模块爬虫
虽然干技术多年了,但从没有写过博客,想来甚是惭愧,本篇作为我博客的第一篇,也是测试篇.不为写的好,只为博诸君一眸而已. 使用python爬虫,有几个比较常用的,获取html_content的模块url ...
- Python - Seaborn可视化:图形个性化设置的几个小技巧
1 概述 在可视化过程中,经常会对默认的制图效果不满意,希望能个性化进行各种设置. 本文通过一个简单的示例,来介绍seaborn可视化过程中的个性化设置.包括常用的设置,如: 设置图表显示颜色 设置图 ...
- 学习笔记TF051:生成式对抗网络
生成式对抗网络(gennerative adversarial network,GAN),谷歌2014年提出网络模型.灵感自二人博弈的零和博弈,目前最火的非监督深度学习.GAN之父,Ian J.Goo ...
- 最短路 - floyd算法
floyd算法是多源最短路算法 也就是说,floyd可以一次跑出所以点两两之间的最短路 floyd类似动态规划 如下图: 用橙色表示边权,蓝色表示最短路 求最短路的流程是这样的: 先把点1到其他点的最 ...
- 【Ubuntu Desktop】VMware 中 Unknown Display
由于之前重复的安装卸载Unity桌面,今天遇到了在设置虚拟机分辨率的时候,遇到了Unknown Display问题 参考网上内容 使用 xrandr调节分辨率 xrandr只能在虚拟机本地终端执行,不 ...
- Android事件传递机制详解及最新源码分析——View篇
摘要: 版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于安卓事件传递机制相信绝大部分开发者都听说过或者了解过,也是面试中最常问的问题之一.但是真正能从源码角度理解具体事件传递流程的相信并不多, ...