欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity實現(xiàn)毫秒延時回調(diào)功能

 更新時間:2021年09月26日 09:56:28   作者:做一個愛學(xué)習(xí)的可愛同學(xué)  
這篇文章主要為大家詳細介紹了Unity實現(xiàn)毫秒延時回調(diào)功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介

在項目的框架中看到了這個延遲回調(diào)的函數(shù),一直以為是通過Unity協(xié)程實現(xiàn)的,最后看了源碼后才發(fā)現(xiàn)是自己實現(xiàn)的。也是,如果用了協(xié)程成千上百個回調(diào)不得卡死。自己實現(xiàn)了一下核心的腳本,但是他的精華在于數(shù)據(jù)結(jié)構(gòu),把每個回調(diào)任務(wù)都做了很好的處理。

API

1: Time.deltaTime

實際上就是每幀所執(zhí)行的時間

功能實現(xiàn)

簡單的說一下功能的實現(xiàn),下面會直接貼出源碼。
每一個新增的任務(wù)(回調(diào))都會記錄創(chuàng)建任務(wù)的時間以及延遲的時間,以及自己的事件回調(diào)。通過每幀判斷當(dāng)前幀的時間是否大于創(chuàng)建的(任務(wù)的時間+延遲的時間)

代碼

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TickManager : MonoBehaviour
{
    // Start is called before the first frame update
    public int NOW;
    private List<Tick> _ticks = new List<Tick>();
    private void Update()
    {
        //測試--手動創(chuàng)建一個5秒后的回調(diào)
        if (Input.GetKeyDown(KeyCode.A))
        {
            Tick tick = new Tick(() =>
            {
                Debug.Log("任務(wù)執(zhí)行");
            },5000,NOW);
            _ticks.Add(tick);
        }
        //每幀所使用的毫秒時間
        uint deltaTime = (uint)(Time.deltaTime * 1000);
        //遍歷判斷集合中的任務(wù)是否執(zhí)行
        for (int i = 0; i < deltaTime; i++)
        {
            Debug.Log("幀數(shù) " + NOW);

            for (int j = 0; j < _ticks.Count; j++)
            {
                _ticks[j].OnTick(NOW);
            }
            ++NOW;
        }
 
    }


    class Tick
    {
        //創(chuàng)建任務(wù)的時間
        public int currentTime { get; set; }
        //需要延遲的時間
        public int delayTime { get; set; }
        //延遲后的回調(diào)事件
        public Action action { get; set; }

        //構(gòu)造函數(shù)--初始化
        public Tick(Action ac, int del, int now)
        {
            action = ac;
            delayTime = del;
            currentTime = now;
        }
        //判斷該任務(wù)是否執(zhí)行
        public void OnTick(int now)
        {
            if (now >= (currentTime + delayTime))
            {
                action();
            }
            else
            {
                Debug.Log("時間還未到 "+ now);
            }
        }
    }
}

待更新

核心的功能很簡單,但是最重要的是對tick的管理,不然每次遍歷所有的任務(wù)是非常耗費性能的,根據(jù)時間的長短放入到不同對list中,這也是后續(xù)待更的內(nèi)容。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實現(xiàn)多線程的Web代理服務(wù)器實例

    C#實現(xiàn)多線程的Web代理服務(wù)器實例

    這篇文章主要介紹了C#實現(xiàn)多線程的Web代理服務(wù)器,涉及C#多線程代理服務(wù)器的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 總結(jié)C#刪除字符串?dāng)?shù)組中空字符串的幾種方法

    總結(jié)C#刪除字符串?dāng)?shù)組中空字符串的幾種方法

    C#中要如何才能刪除一個字符串?dāng)?shù)組中的空字符串呢?下面的文章會介紹多種方式來實現(xiàn)清除數(shù)組中的空字符串,以及在.net中將字符串?dāng)?shù)組中字符串為空的元素去除。
    2016-08-08
  • C#實現(xiàn)萬物皆可排序的隊列方法詳解

    C#實現(xiàn)萬物皆可排序的隊列方法詳解

    本文詳細講解了C#實現(xiàn)萬物皆可排序隊列的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Unity?UGUI的Mask遮罩組件使用詳解

    Unity?UGUI的Mask遮罩組件使用詳解

    這篇文章主要為大家介紹了Unity?UGUI的Mask遮罩組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • C#中如何使用 XmlReader 讀取XML文件

    C#中如何使用 XmlReader 讀取XML文件

    本文介紹了C#中使用XmlReader,只讀、向前、循環(huán)讀取XML節(jié)點的方法,并為我們列出、XmlReader類的方法、屬性、枚舉等成員,希望對大家學(xué)習(xí)有所幫助。
    2016-05-05
  • C#?函數(shù)返回多個值的方法詳情

    C#?函數(shù)返回多個值的方法詳情

    這篇文章主要介紹了C#函數(shù)返回多個值的方法詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • C#中實現(xiàn)抽象類里建立靜態(tài)方法

    C#中實現(xiàn)抽象類里建立靜態(tài)方法

    這篇文章主要介紹了C#中實現(xiàn)抽象類里建立靜態(tài)方法,需要的朋友可以參考下
    2014-07-07
  • c#多種加解密示例(md5加密解密)

    c#多種加解密示例(md5加密解密)

    這篇文章主要介紹了c#多種加解密示例,包括了MD5加密,SHA1加密,DES加解密,需要的朋友可以參考下
    2014-03-03
  • C#窗體實現(xiàn)點餐系統(tǒng)

    C#窗體實現(xiàn)點餐系統(tǒng)

    這篇文章主要為大家詳細介紹了C#窗體實現(xiàn)點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C#解析json文件的實現(xiàn)代碼

    C#解析json文件的實現(xiàn)代碼

    最近需要用c#解析json文件,以前沒用過這個,百度了一下找到了這篇文章感覺不錯,特分享下
    2013-06-06

最新評論