Unity时间管理 - 纳金网
联系我们

给我们留言

联系我们

地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网

邮箱:info@narkii.com

电话:0595-82682267

(周一到周五, 周六周日休息)

当前位置:主页 > 3D教程 > 图文教程

Unity时间管理

来源: 未知 | 责任编辑:六月芳菲 | 发布时间: 2018-03-07 09:38 | 浏览量:

更多精彩unity教程:http://www.narkii.com/resource/



时间管理类TimerManager.cs
using UnityEngine;
using System;
using System.Collections.Generic;
 
/// <summary>
/// 时间管理
/// </summary>
public class TimerManager
{
    /// <summary>
    /// 当前游戏运行的时间
    /// </summary>
    public static float time;
 
    /// <summary>
    /// 对象池
    /// </summary>
    public static Dictionary<object, TimerItem> timerList = new Dictionary<object, TimerItem>();
 
    /// <summary>
    /// 启动
    /// </summary>
    public static void Run()
    {
        // 设置时间值
        TimerManager.time = Time.time;
 
        TimerItem[] objectList = new TimerItem[timerList.Values.Count];
        timerList.Values.CopyTo(objectList, 0);
 
        // 锁定
        foreach (TimerItem timerItem in objectList)
        {
            if (timerItem != null) timerItem.Run(TimerManager.time);
        }
    }
 
    /// <summary>
    /// 注册
    /// </summary>
    /// <param name="objectItem">Object item.</param>
    /// <param name="delayTime">Delay magicTime.</param>
    /// <param name="callback">Callback.</param>
    public static void Register(object objectItem, float delayTime, Action callback)
    {
        if (!timerList.ContainsKey(objectItem))
        {
            TimerItem timerItem = new TimerItem(TimerManager.time, delayTime, callback);
            timerList.Add(objectItem, timerItem);
        }
    }
 
    /// <summary>
    /// 取消注册
    /// </summary>
    /// <param name="objectItem">Object item.</param>
    public static void UnRegister(object objectItem)
    {
        if (timerList.ContainsKey(objectItem))
        {
            timerList.Remove(objectItem);
        }
    }
}
 
时间对象类TimerItem.cs
using UnityEngine;
using System;
 
public class TimerItem
{
    /// <summary>
    /// 当前时间
    /// </summary>
    public float currentTime;
 
    /// <summary>
    /// 延迟时间
    /// </summary>
    public float delayTime;
 
    /// <summary>
    /// 回调函数
    /// </summary>
    public Action callback;
 
    public TimerItem(float time, float delayTime, Action callback)
    {
        this.currentTime = time;
        this.delayTime = delayTime;
        this.callback = callback;
    }
 
    /// <summary>
    /// 启动
    /// </summary>
    /// <param name="time">Time.</param>
    public void Run(float time)
    {
        // 计算差值
        float offsetTime = time - this.currentTime;
 
        // 如果差值大等于延迟时间
        if (offsetTime >= this.delayTime)
        {
            float count = offsetTime / this.delayTime - 1;
            float mod = offsetTime % this.delayTime;
 
            for (int index = 0; index < count; index++)
            {
                this.callback();
            }
 
            this.currentTime = time - mod;
        }
    }
}
 
启动计时管理器UpdateItem.cs
using UnityEngine;
/// <summary>
/// 挂靠在一个永远不会被销毁的GameObject上面
/// </summary>
public class UpdateItem : MonoBehaviour {
     
    void Update()
    {
        // 启动计时管理器
        TimerManager.Run();
    }
}
 
测试类Test.cs
using UnityEngine;
 
public class Test : MonoBehaviour {
    float time = 5f;
        // Use this for initialization
        void Start () {
        TimerManager.Register(this, 1f, () => {
            if (time>0)
            {
                time -= 1f;
                Debug.Log("倒计时测试:"+time);
            }
            else
            {
                Debug.Log("倒计时结束");
                TimerManager.UnRegister(this);
            }
 
        });
        }
         
}
 

更多精彩unity教程:http://www.narkii.com/resource/


相关文章
网友评论

您需要登录后才可以发帖 登录 | 立即注册

关闭

全部评论:0条

推荐
热门