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 ...
随机推荐
- nodejs模块学习: express-session 解析
nodejs模块学习: express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创 ...
- MySQL之增_insert-replace
MySQL增删改查之增insert.replace 一.INSERT语句 带有values子句的insert语句,用于数据的增加 语法: INSERT [INTO] tbl_name[(col_nam ...
- HDU字符串基础题(1020,1039,1062,1088,1161,1200,2017)
并不是很精简,随便改改A过了就没有再简化了. 1020. Problem Description Given a string containing only 'A' - 'Z', we could ...
- 53. Maximum Subarray【leetcode】
53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...
- Java中的char究竟能存中文吗?
今天面试被问到"Java中的char能存中文吗?",我回答有的字能有的字不能,结果被嘲笑了,不过我也忘了字符编码的相关知识所以也没能解释.晚上查了下资料,记录一下. 网上搜索这个问 ...
- 【NO.14】jmeter-处理结果
在1台测试机上面处理测试结果并没啥,比较麻烦的是合并2台测试机的测试结果. 首先说说,为什么我们需要使用2台(甚至3台.4台)测试机对服务器发送大量的请求呢?说白了就是测试机配置太弱了,服务器太牛逼. ...
- Mybatis(三)
1 Mybaits--动态SQL 动态SQL是Mybatis强大特性之一.极大的简化我们拼装SQL的操作. 动态SQL元素和使用JSTL或其他类似基于XML的文本处理器相似. Mybatis采用功能强 ...
- k-means算法概述
算法过程: 随机选取K个种子点 求所有点到种子点的距离,将点纳入距离最近的种子点群 所有点均被纳入群内后,将种子点移动到种子群中心 重复上述2.3过程,直至种子点没有移动 优缺点: 优点:容易实现 缺 ...
- 关于HTML应用中的实操细节
在编写HTML程序时,初阶段在打编码时容易忽视语法方面的问题,如大小写,中英文切换标点等.正常在编码时出现语法问题自己很难发现,所以刚开始练习特别要注重语法方面的规范,另外在编码时要有规范的书写方式, ...
- 使用Maven来创建WEB项目
IDE: Eclipse Tool:Maven 1. 下载JDK,配置java环境变量 2.下载Maven,配置Maven环境变量 3. 利用Maven来创建WEB项目 (1)按照下面的截图流程创建m ...