一下内容学习自极客学院
SendMessag
SendMessag() 消息的推送
在工程内任意地方使用,用于向某些引用传递消息,直接执行某写函数。(= =)
BroadcastMessage() 向子物体消息的推送
意思是GameObject中的所有子物体执行括号中方法
使用方法:
GameObject.Find(“something”).BroadcastMessage(“fun”,value1,SendMessageOption.DontRequireReceiver);
最后的那个Send…指的是,即使我们所指定的对象没有fun函数,也会进行下去(不会报错);如果没有该参数,则当我们执行了不存在的方法时,报错。
Invoke()延迟执行程序
Invoke()延迟执行程序
使用方法:Invoke(“function”,2f);
刚才的使用方法的意思为 在2秒之后执行 function方法,其中function为方法名称,第二个参数为float类型(Unity好多float,,,)
InvokeRepeating()重复并延迟执行程序
使用方法:InvokeRepeating(“function”,2f,1f);其中第二个参数为两次function执行之间的间隔
#同时,我们需要使用 CancelInvoke()方法,对所有或者指定的Repeating进行取消,使用方法:CancelInvoke(“function”);
Coroutine()协同执行程序
目测会经常用的方法
*在主程序运行时,同时开启另一段逻辑处理,来协同当前程序的执行
*开启协同程序就是类似于开启一个线程
*但是 协成 并不是 线程
官网Coroutine实例
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour{
void Start(){
print("Starting " + Time.time);
StartCoroutine(WaitAndPrint(2.0f));
print("Before WaitAndPrint Finishes " + Time.time);
}
IEnumerator WaitAndPrint(float waitTime){
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
}
其中的 Enumerator 和 yield return… 是作为Coroutine方法所必须的
yield 内容如果为 yield return null; 则代表挂起一帧,在下一帧重新被调用
如
/**********调用方法*********/ public void OnMouseDown(){ StartCoroutine(testMove()); } /**********方法体***********/ Enumerator testMove(){ for(int i = 0;i < 100;i++){ this.transform.Translate(.1f,0f,0f); yield return null; } }
这样,我们每一帧都会向上 translate .1f 的距离,直到 100
#我们可以使用 Coroutine 来执行相对吃内存并且只需要很少调用的程序,比如地图的加载等等吃系统配置的操作。如果不使用 Coroutine 的话,我们则需要将当前操作完成之后可以进行下一步。