Инициировать события в определенное время в datetime - PullRequest
1 голос
/ 02 апреля 2019

Моя игра содержит дату и время для представления внутриигровой даты, и она будет автоматически пересылать время.И у меня есть ряд событий, которые произойдут только в определенную дату.

Вопрос в том, как лучше всего, чтобы, когда придет время, это вызвало эти события?

Теперь самое лучшееЯ могу подумать об установке даты для каждого из этих событий, поэтому каждый раз, когда игровое время обновляется, я проверяю, если (игровое время> = время события).Но, похоже, это сильно истощает ресурсы, потому что время обновляется очень часто в секунду.Есть ли лучший способ сделать это?

public class DateTimeManager : MonoBehaviour
{
    //Singleton
    public static DateTimeManager dateManager;

    //Get other objects
    private GameStatManager gameStatManager;

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

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

    //Output var
    public DateTime dateTime;

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

        //Initialize
        dateTime = gameStatManager.GetDateTime();

        //Set default
        Time.timeScale = 1;
        timeScaleImage.sprite = slow;
        counter = 0f; 
        dayCounter = 0;
    }

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

        if (counter >= 1f / Time.timeScale){
            counter -= 1f / Time.timeScale;

            //Add 10 muinutes
            dateTime = dateTime.AddMinutes(10);

            //Add dayCounter
            dayCounter++;
            if(dayCounter >= 144){
                dayCounter = 0;
                gameStatManager.AddTotalDay();
            }

            //Display datetime
            displayDate.text = dateTime.ToString("dd MMM, yyyy");
            displayTime.text = dateTime.ToString("h:mmtt");  

            //To GSM
            gameStatManager.SetDateTime(dateTime);
        }
    }

    //Button function
    public void ChangeTimeScale(){

        // 1f = 10mins/sec || 6f = 1hrs/sec || 36f = 6hrs/sec
        if (Time.timeScale == 1f){
            Time.timeScale = 6f;
            timeScaleImage.sprite = medium;
        }
        else if (Time.timeScale == 6f){
            Time.timeScale = 36f;
            timeScaleImage.sprite = fast;
        }
        else {
            Time.timeScale = 1f;
            timeScaleImage.sprite = slow;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...