unity定时器invokerepeating 时间可以是变量么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity定时器invokerepeating 时间可以是变量么相关的知识,希望对你有一定的参考价值。
参考技术A unity定时器invokerepeating 时间可以是变量循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。
1) 用goto语句和if语句构成循环;
2) 用while语句;
3) 用do-while语句;
4) 用for语句;
6.2 goto语句以及用goto语句构成循环
goto语句是一种无条件转移语句, 与BASIC中的goto语句相似。goto 语句的使用格式为:
goto 语句标号;
其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用, 当满足某一条件时, 程序跳到标号处运行。
goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时, 用goto语句则比较合理。
【例6.1】用goto语句和if语句构成循环, 。本回答被提问者采纳
(@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方法的调用。
直接上代码看更加直观。
1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.Events; 4 5 public class InvokeTest : MonoBehaviour { 6 public GameObject Prefabs; 7 private Vector3 v3; 8 public int i = 5; 9 // Use this for initialization 10 void Start () { 11 v3 = new Vector3(0, 0, 0); 12 Invoke("TestIns", 1); 13 //InvokeRepeating("TestIns", 2, 1); //调用InvokeRepeating时候解开 14 } 15 16 // Update is called once per frame 17 void Update () { 18 if (v3.x == 20) CancelInvoke("TestIns"); 19 } 20 21 void TestIns() { 22 //v3.x += i; //调用InvokeRepeating时候解开 23 Instantiate(Prefabs,v3,Quaternion.identity); 24 } 25 26 }
以上代码,分别是Invoke方法,InvokeRepeating方法,CancelInvoke方法的使用。
Invoke还有一个用法就是可以激活UnityEvent。
下面是例子。
1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.Events; 4 5 public class TestLoader : MonoBehaviour { 6 [SerializeField] 7 protected UnityEvent onLoad = new UnityEvent(); 8 [SerializeField] 9 protected UnityEvent unLoad = new UnityEvent(); 10 // Use this for initialization 11 void Start () { 12 Load(); 13 UnLoad(); 14 } 15 16 // Update is called once per frame 17 void Update () { 18 19 } 20 21 [ContextMenu("Load")] 22 public void Load() { 23 onLoad.Invoke(); 24 } 25 26 [ContextMenu("unLoad")] 27 public void UnLoad() { 28 unLoad.Invoke(); 29 } 30 }
这里有两个序列化的UnityEvent,可能看代码不是很直观,直接上图。
是不是感觉很眼熟。对就是,像我们经常看到的Button下边的OnClick其实就是这种东西。
我们为这个东西挂上我们自己的测试脚本。
但是这时候我们想要调用测试脚本的方法了,这时候就用到了Invoke。
这里会自动调用UnityEvent下的脚本的指定方法。
测试脚本的代码如下。
1 using UnityEngine; 2 using System.Collections; 3 4 public class onLoadScripts1 : MonoBehaviour { 5 public void systemLoadMessage() { 6 Debug.Log("=======WhiteTaken======="); 7 } 8 9 public void systemLoadMessage(int i) { 10 Debug.Log("=====WhiteTaken:" + i + "======"); 11 } 12 } 13 14 using UnityEngine; 15 using System.Collections; 16 17 public class onLoadScripts2 : MonoBehaviour { 18 public void systemLoadLog() { 19 Debug.Log("--------WhiteTaken----------"); 20 } 21 } 22 23 using UnityEngine; 24 using System.Collections; 25 26 public class unLoadScripts : MonoBehaviour { 27 public void systemUnLoad(string name) { 28 Debug.Log("===----+ "+name+"卸载:-----====="); 29 } 30 }
运行以后我们可以看到打印结果。
Invoke的其他用法,还没怎么用到,欢迎大家对我提出意见。有错误我会直接修改。
今晚继续学习单例模式。
以上是关于unity定时器invokerepeating 时间可以是变量么的主要内容,如果未能解决你的问题,请参考以下文章
Unity延时方法Invoke和InvokeRepeating
unity延时方法Invoke和InvokeRepeating
unity延时方法Invoke和InvokeRepeating