(@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 ...
随机推荐
- 控制流之if
if语句if语句用来检验一个条件, 如果 条件为真,我们运行一块语句(称为 if-块 ), 否则 我们处理另外一块语句(称为 else-块 ). else 从句是可选的. ~~~~~~~~~~~~~~ ...
- SQL 复习二(数据查询语言)
1.1 数据查询语言 DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ FR ...
- linux shell 之if-------用if做判断
综合网络,略有修改, 一 简介 1 字符串判断 str1 = str2 当两个串有相同内容.长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0 ...
- 产品需求文档写作方法(三)用例文档(UML用例图、流程图)
在产品和技术领域里都有UML的技能知识,而对于产品人员的UML则更多的是指用例图,也就是我所称呼的用户流程图.在讲PRD文档写作的第二篇文章里,我提到了用户流程图的制作,实际上用户流程图是我在产品规则 ...
- list集合怎么转化成一个javaBean对象,及常见的使用方法(全)
一.List集合的用法 1.list集合添加实体并输出 for (int i = 0; i < list.size(); i++) { javabean obj= (javabean)list. ...
- API WAVE 专栏
关于音频输入.输出设备的使用 源:API WAVE 专栏
- SVN打基线
分成trunk.tags.branches的话,那直接从trunk copy 到tags下面就可以或者按照你自己的目录,只要规定好就行 选择要打基线的项目的根目录,右击鼠标,在弹出的菜单中选择“分支/ ...
- js prototype 和constructor
1.function 和object 都有 constructor 和prototype 2. var a=new Animal() (animal 是function或Object) a 有 con ...
- JavaScript高级程序设计-13:事件
JavaScript与HTML之间的交互是通过事件实现的. 一.事件流 首先我们要明白事件流的概念.当我们点击一个按钮时,也点击了按钮的容器元素,甚至也点击了整个事件.事件流描述就是从页面中接收事件的 ...
- Valgrind 快速入门
1. 介绍 Valgrind工具组提供了一套调试与分析错误的工具包,能够帮助你的程序工作的更加准确,更加快速.这些工具之中最有名的是Memcheck.它能够识别很多C或者C++程序中内存相关的错误,这 ...