今天无意间读到大神写的代码,看到了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的用法的更多相关文章

  1. (转)C#中Invoke的用法 一

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...

  2. unity 中 protobuff 的用法 一句话攻略

    (一)unity 添加 pb 的 dll 支持.1,从GitHub上下载protobuf源码 (源码链接:https://github.com/google/protobuf),找到 csharp 分 ...

  3. C#中Invoke的用法2

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...

  4. C#中Invoke的用法(转)

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...

  5. C#中Invoke的用法()

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

  6. 【转】C#中Invoke的用法

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...

  7. C#中Invoke的用法

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫"打开",单击之后按钮上的文本显示 ...

  8. C#中Invoke的用法1

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解.  首先说下,invoke和be ...

  9. [转载]C#中Invoke的用法()

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

随机推荐

  1. 【转】C++中this指针的用法详解

    1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...

  2. C socket post数据到url

    #define HOST_SERVER_IP "192.168.1.15" #define HOST_PORT 80 int gsh_post_clients(const char ...

  3. SpringJDBC学习之路(1)

    本人从事java开发也有一段时间了,项目开发也有好几个.但感觉所有写的代码无非就是搬数据取数据.service层写的逻辑多一点,最近做的一个项目整个项目的结构以及层次发现代码过于臃肿冗余.同样一个方法 ...

  4. linux命令学习6-dpkg命令

    dpkg命令是Debian Linux系统用来安装.创建和管理软件包的实用工具. 1. 语法 dpkg (选项) (参数)2. 选项 -i:安装软件包: -r:删除软件包: -P:删除软件包的同时删除 ...

  5. php 三大特点:封装,继承,多态

    一.封装 目的:让类更安全 做法:成员变量变为私有的,通过方法间接操作成员变量,在方法里面加限制条件 二.继承 概念:子类可以继承父类的一切 方法重写:在子类里面对父类进行方法重写 特点:单继承:一个 ...

  6. 微信小程序之----底部菜单action-sheet

    action-sheet action-sheet是从底部弹出的选择菜单,子菜单通过action-sheet-item和action-sheet-cancel指定,action-sheet-item是 ...

  7. HTML5 EventSource的用法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. python 爬取的数据要如何展现(可视化)?

    我是把数据放在 mongodb ,然后单独一个脚本作分析,导出 json ,用 c3.js 画图,然后随便写个很简单的页面就好了. 展示在这里: http://107.170.207.236/job_ ...

  9. UVa 524 - Prime Ring Problem

    题目大意:输入正整数n,把整数1,2...,n组成一个环,使得相邻两个整数之和均为素数.输出时从整数1开始逆时针(题目中说的不是很明白??)排列.同一个环应恰好输出一次. 枚举,并在枚举每一个数是进行 ...

  10. spark transform操作卡死,请先对rdd进行action操作

    这两天一直在写spark程序,遇到了一个奇怪的问题. 问题简单描述如下,有两个RDD,设为rdd_a,rdd_b,当将这两个rdd合并的时候,spark会在运行中卡死. 解决方式也是奇葩. 只要在合并 ...