繁体   English   中英

我怎样才能让“时间”不断更新

[英]How I can make "Time" to be update constantly

我是统一的初学者游戏开发者,我“独自”开始新的小项目,在我的游戏中我遇到了一个小问题。

我的问题是时间,即游戏中的时钟不同步,不同步,我有些怀疑。

我知道我可能又做错了一步,也许我在整个函数中放了一个错误的等式,什么都不起作用了,但更简单地说,我想制作一个游戏界面是桌面和时钟的游戏我在下面对其进行了编码,它无法随时间更新,我等待并尝试了我应用的许多解决方案但它们没有用,所以我将代码留在下面

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

public class DateTime : MonoBehaviour
{

    public Text timeLockScreenText;
    public Text dateLockScreenText;
    public Text timeTaskBarText;
    string time = System.DateTime.UtcNow.ToLocalTime().ToString("HH:mm");
    string date = System.DateTime.UtcNow.ToLocalTime().ToString("MM-dd-yyyy");

    // Update is called once per frame
    void Update()
    {
        InvokeRepeating("DateTimeV",0f,1f);
    }

    public void DateTimeV()
    {
    timeLockScreenText.text = time;
    dateLockScreenText.text = date;
    timeTaskBarText.text = timeLockScreenText.text;
    }
}

现在我有一些理论:

  • 一个是在游戏中,就像在现实生活中一样,就像任何个人计算机用户一样,当我们打开它时,会有一个带有时钟的锁屏,我们一直按回车进入以访问互联网和桌面上的其他文件,所以我的理论是锁屏是一个游戏对象,就像桌面的可见性一样,即如果锁屏处于活动状态,桌面是不可见的,反之亦然,时钟不会更新,因为假设我们在桌面上锁屏被禁用,这就是脚本不起作用的原因,您必须制作两个单独的脚本,一个用于锁屏,一个用于桌面,实际上是用于桌面上的时钟
  • 或者我不知道如何写好代码

我尝试在 InvokeRepeting 中放入 Update() 函数,StartCourutine 和 IEnumerator 函数,但我没有解决方案

我对 Unity 一无所知,但似乎您在最初分配timedate后永远不会更新它们的值。 也许像这样的事情可以解决问题,您只需在方法中分配正确的值:

public void DateTimeV()
{
    DateTime utcNow = System.DateTime.UtcNow.ToLocalTime();

    timeLockScreenText.text = utcNow.ToString("HH:mm");
    dateLockScreenText.text = utcNow.ToString("MM-dd-yyyy");
    timeTaskBarText.text = timeLockScreenText.text;
}

使用固定更新,以及来自Rufus L的代码:

void FixedUpdate() => DateTimeV();

public void DateTimeV()
{
    DateTime utcNow = System.DateTime.UtcNow.ToLocalTime();

    timeLockScreenText.text = utcNow.ToString("HH:mm");
    dateLockScreenText.text = utcNow.ToString("MM-dd-yyyy");
    timeTaskBarText.text = timeLockScreenText.text;
}

Rufus L所说的 + 你只会使用InvokeRepeating一次,例如

private void Start()
{
    InvokeRepeating(nameof(DateTimeV), 0f, 1f);
}

或者使用一个简单的计数器

private float timer;

private void Update ()
{
    timer += Time.deltaTime;

    if(timer > 1f)
    {
        timer -= 1f;

        DateTimeV();
    }
}

或协程

private IEnumerator Start()
{
    while(true)
    {
        DateTimeV();

        yield return new WaitForSeconds(1f);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM