Unity3D之定时器和延时器
  RlWeLU85QNwT 2023年11月02日 85 0

一, 前言

     因为做过H5游戏的开发,所以对 setInterval、setTimeout特别的亲切, 但是对于Unity的Invoke、InvokeRepeating这2货,就稍稍觉得有些懵逼了.慢慢适应吧

二, 使用方法

void Invoke(string methodName, float time);//时间单位为秒

//在time秒后调用方法, 然后每秒都调用

void InvokeRepeating(string methodName, float time, float repeatRate);

三, 案例

     1, 场景

Unity3D之定时器和延时器_定时器

     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);
}
}


3,结果

Unity3D之定时器和延时器_延时器_02

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论