Unity C#游戏中日期时间系统已延迟

时间:2019-03-24 09:35:00

标签: c# datetime unity3d

我的游戏实现了一个包含3种速度的日期时间系统:

慢:1秒= 10分钟,

正常:1秒= 2个小时,

最快:1秒= 1个游戏日

慢速可以正常工作,正常速度会有一点延迟,而快速则延迟很多(例如每天2.5秒)。是因为计算机无法处理太多操作吗?有什么办法可以实现吗?谢谢。

下面是我的脚本,重要的部分始于更新功能。

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

//Manage datetime
public class DateManager : MonoBehaviour
{
    //Singleton
    public static DateManager dateManager;

    //Get other objects
    private GameStatManager gameStatManager;

    //Local var
    private Text displayTime;
    private Text displayDate;
    private Image timeScaleImage;
    float counter;

    //Get speed icon
    public Sprite slow;
    public Sprite medium;
    public Sprite fast;

    //Output var
    public DateTime date;
    private float timeScale;

    void Start(){

        //Singleton
        dateManager = this;

        //Get other objects
        gameStatManager = GameObject.Find("GameStatManager").GetComponent<GameStatManager>();
        displayDate = transform.Find("Date").gameObject.GetComponent<Text>();
        displayTime = transform.Find("Time").gameObject.GetComponent<Text>();
        timeScaleImage = transform.Find("TimeScale").gameObject.GetComponent<Image>();

        //Set default
        timeScale = 1f;
        timeScaleImage.sprite = slow;
        counter = 0f;
        date = new DateTime(2010, 01, 01);
    }

    void Update()
    {
        counter += Time.deltaTime;

        if (counter >= 1f / timeScale){
            counter = 0f;
            date = date.AddMinutes(10);
            displayDate.text = date.ToString("dd MMM, yyyy");
            displayTime.text = date.ToString("HH:mmtt");  

            //To GSM
            gameStatManager.SetDate(date);
        }
    }

    //Button function
    public void ChangeTimeScale(){

        // 1f = 10mins/sec || 12f = 2hrs/sec || 144f = 1day/sec
        if (timeScale == 1f){
            timeScale = 12f;
            timeScaleImage.sprite = medium;
        }
        else if (timeScale == 12f){
            timeScale = 144f;
            timeScaleImage.sprite = fast;
        }
        else {
            timeScale = 1f;
            timeScaleImage.sprite = slow;
        }

        //To GSM
        gameStatManager.SetTimeScale(timeScale);
    }
}

0 个答案:

没有答案