在 Unity 中实现秒表功能,核心原理是利用 Unity 的时间管理机制来记录和显示经过的时间。以下详细介绍基于不同方法实现秒表的原理及示例代码
基于 Time.deltaTime 实现
原理
Time.deltaTime 是 Unity 中的一个内置属性,它表示从上一帧到当前帧所经过的时间(以秒为单位)。通过在每帧累加 Time.deltaTime,就可以得到从秒表启动开始所经过的总时间。
两种方法实现
第一种
代码如下:
/// <summary>
/// 秒表的实现方法 创建一个Text 挂在上面即可
/// </summary>
private float timeSpend = 0;
private int hour; //小时
private int minute; //分钟
private int second; //秒
private int millisecond; //毫秒
private Text recealText; //显示的text
private void Start()
{
recealText = this.transform.GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
timeSpend += Time.deltaTime;
hour = (int)timeSpend / 3600;
minute = ((int)timeSpend - hour * 3600) / 60;
second = (int)timeSpend - hour * 3600 - minute * 60;
millisecond = (int)((timeSpend - (int)timeSpend) * 1000);
recealText.text = string.Format("{0:D2}:{1:D2}:{2:D2}:{3:D3}", hour, minute, second, millisecond);
}
第二种
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Timer_Clock : MonoBehaviour
{
/// <summary>
/// 秒表的实现方法 创建一个Text 挂在上面即可
/// </summary>
private float timeSpend = 0;
private int hour; //小时
private int minute; //分钟
private int second; //秒
private int millisecond; //毫秒
public Text recealText; //显示的text
public bool mator = false;
private void Start()
{
recealText = this.transform.GetComponent<Text>();
StartCoroutine(timerr ());
}
IEnumerator timerr()
{
while (!mator)
{
timeSpend += Time.deltaTime;
hour = (int)timeSpend / 3600;
minute = ((int)timeSpend - hour * 3600) / 60;
second = (int)timeSpend - hour * 3600 - minute * 60;
millisecond = (int)((timeSpend - (int)timeSpend) * 1000);
recealText.text = string.Format("{0:D2}:{1:D2}:{2:D2}:{3:D3}", hour, minute, second, millisecond);
yield return new WaitForFixedUpdate();
}
}
public void OnDestyoy_OBJ()
{
Destroy(this.gameObject);
}
}
以上就是两种方法