一, 前言
因为做过H5游戏的开发,所以对 setInterval、setTimeout特别的亲切, 但是对于Unity的Invoke、InvokeRepeating这2货,就稍稍觉得有些懵逼了.慢慢适应吧
二, 使用方法
void Invoke(string methodName, float time);//时间单位为秒
//在time秒后调用方法, 然后每秒都调用
void InvokeRepeating(string methodName, float time, float repeatRate);
三, 案例
1, 场景
2, 代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SetTimeOutDemo : MonoBehaviour
{
private Button btnIn;
private Button btnRe;
// Start is called before the first frame update
void Start()
{
this.btnIn = this.transform.Find("btnIn").gameObject.GetComponent<Button>();
this.btnRe = this.transform.Find("btnRe").gameObject.GetComponent<Button>();
this.Invoke( "doInvolve" , 5 );//5秒后执行
this.InvokeRepeating("doInvokeRepeating", 3, 5);//3秒后执行房后, 以后每5秒执行1次
this.listener(true);
}
private void listener(bool isAdd) {
if (isAdd)
{
this.btnIn.onClick.AddListener(this.onBtnInClick);
this.btnRe.onClick.AddListener(this.onBtnReClick);
}
else
{
this.btnIn.onClick.RemoveListener(this.onBtnInClick);
this.btnRe.onClick.RemoveListener(this.onBtnReClick);
}
}
private void onBtnInClick() {
Debug.Log("取消 Invoke 执行");
this.CancelInvoke("doInvolve");
}
private void onBtnReClick() {
Debug.Log("取消 InvokeRepeating 的执行");
this.CancelInvoke("doInvokeRepeating");
}
private void doInvolve(){
Debug.Log("5秒后执行操作"); // 测试OK
}
private void doInvokeRepeating() {
Debug.Log("执行 InvokeRepeating 方法");
}
// Update is called once per frame
void Update()
{
}
void OnDestroy() {
this.listener(false);
}
}