(@WhiteTaken)Unity中Invoke的用法
今天无意间读到大神写的代码,看到了Invoke函数,于是产生兴趣。后来才明白自己要学习的东西还有很多。
下面讲用法。
Invoke是延时调用函数,在用Invoke函数之前需要引入命名空间using UnityEngine.Events;
1.Invoke("MethodName",2)
这个比较简单,写在c#脚本中,意为 两秒之后调用一次,MethodName方法。
2.InvokeRepeating("MethodName",1,2)
这个方法就是多次调用Invoke,即理解为一秒后,每隔两秒调用MethodName方法。
3.CancelInvoke("MethodName")
取消MethodName方法的调用。
直接上代码看更加直观。
using UnityEngine;
using System.Collections;
using UnityEngine.Events; public class InvokeTest : MonoBehaviour {
public GameObject Prefabs;
private Vector3 v3;
public int i = ;
// Use this for initialization
void Start () {
v3 = new Vector3(, , );
Invoke("TestIns", );
//InvokeRepeating("TestIns", 2, 1); //调用InvokeRepeating时候解开
} // Update is called once per frame
void Update () {
if (v3.x == ) CancelInvoke("TestIns");
} void TestIns() {
//v3.x += i; //调用InvokeRepeating时候解开
Instantiate(Prefabs,v3,Quaternion.identity);
} }
以上代码,分别是Invoke方法,InvokeRepeating方法,CancelInvoke方法的使用。
Invoke还有一个用法就是可以激活UnityEvent。
下面是例子。
using UnityEngine;
using System.Collections;
using UnityEngine.Events; public class TestLoader : MonoBehaviour {
[SerializeField]
protected UnityEvent onLoad = new UnityEvent();
[SerializeField]
protected UnityEvent unLoad = new UnityEvent();
// Use this for initialization
void Start () {
Load();
UnLoad();
} // Update is called once per frame
void Update () { } [ContextMenu("Load")]
public void Load() {
onLoad.Invoke();
} [ContextMenu("unLoad")]
public void UnLoad() {
unLoad.Invoke();
}
}
这里有两个序列化的UnityEvent,可能看代码不是很直观,直接上图。

是不是感觉很眼熟。对就是,像我们经常看到的Button下边的OnClick其实就是这种东西。
我们为这个东西挂上我们自己的测试脚本。
但是这时候我们想要调用测试脚本的方法了,这时候就用到了Invoke。

这里会自动调用UnityEvent下的脚本的指定方法。
测试脚本的代码如下。
using UnityEngine;
using System.Collections; public class onLoadScripts1 : MonoBehaviour {
public void systemLoadMessage() {
Debug.Log("=======WhiteTaken=======");
} public void systemLoadMessage(int i) {
Debug.Log("=====WhiteTaken:" + i + "======");
}
} using UnityEngine;
using System.Collections; public class onLoadScripts2 : MonoBehaviour {
public void systemLoadLog() {
Debug.Log("--------WhiteTaken----------");
}
} using UnityEngine;
using System.Collections; public class unLoadScripts : MonoBehaviour {
public void systemUnLoad(string name) {
Debug.Log("===----+ "+name+"卸载:-----=====");
}
}
运行以后我们可以看到打印结果。

Invoke的其他用法,还没怎么用到,欢迎大家对我提出意见。有错误我会直接修改。
今晚继续学习单例模式。
(@WhiteTaken)Unity中Invoke的用法的更多相关文章
- (转)C#中Invoke的用法 一
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...
- unity 中 protobuff 的用法 一句话攻略
(一)unity 添加 pb 的 dll 支持.1,从GitHub上下载protobuf源码 (源码链接:https://github.com/google/protobuf),找到 csharp 分 ...
- C#中Invoke的用法2
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...
- C#中Invoke的用法(转)
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...
- C#中Invoke的用法()
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...
- 【转】C#中Invoke的用法
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...
- C#中Invoke的用法
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫"打开",单击之后按钮上的文本显示 ...
- C#中Invoke的用法1
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和be ...
- [转载]C#中Invoke的用法()
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...
随机推荐
- 单片机裸机下写一个自己的shell调试器
该文章是针对于串口通讯过程中快速定义命令而写的,算是我自己的一个通用化的平台,专门用来进行串口调试用,莫要取笑 要处理串口数据首先是要对单片机的串口中断进行处理,我的方法是正确的命令必须要在命令的结尾 ...
- 利用反射动态从程序集dll执行方法和属性
程序结构: //获取程序集 Assembly asb = Assembly.LoadFrom(path);//path为程序集的物理路径 //获取程序集下面的Student类 Type documen ...
- Spring学习---JPA配置和使用
理论的东西如果不实践,永远不会变成自己的东西.本文将介绍用maven管理,用Hibernate作为JPA供应商,使用MYSQL数据库,配置和使用JPA. 以下代码已经上传至GITHUB. ...
- laravel memcached使用
当第一次使用cache时,想用 memcached 的方式,但是它直接报错: 说明你的php没安装 memcached 这个扩展,在ubuntu下直接 sudo apt-get install mem ...
- LPC1788做U盘的时候对命令的响应
首先是对于端点的数据处理 #ifndef __USBEP2_H_ #define __USBEP2_H_ #include "usb.h" #include "usbhw ...
- Keil STM32调试,使用ST-Link下载程序时提示“flash timeout.reset the target and try it again”
参考: 很郁闷,买来没多久的 STM32F4-DISCOVERY 就挂了? STM32F103RB Jlink调试的时候出现flash timeout.reset the target and t ...
- java实现——035第一个只出现一次的字符
import java.util.Hashtable; public class T035 { public static void main(String[] args) { FirstNotRep ...
- 关于jquery的$each((Object, function(p1, p2)用法
通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) ...
- java系列--集合
==比较地址,equals比较内容 一.常用集合框架: 1.List结构集合类:ArrayList类: LinkedList类:addFirst( ),addLast( ),remove( ), Ve ...
- ExcelUtil
package cn.com.jansh.core.util; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi ...