暂停游戏
Time.timeScale = 0;
继续游戏
Time.timeScale = 1;
Time.time,受缩放影响的游戏运行时间,不随场景的重启而归零。
Time.delateTime,以秒为单位,表示每帧的经过时间,受Time.timeScale的影响。0.02
Time.unscaledDelateTime,不受缩放影响的每帧经过时间。
Time.unscaledTime 不受缩放影响的游戏运行时间 与 realtimeSinceStartup 的差别仅在精度
Time.realtimeSinceStartup 实际游戏运行时间
InvokeRepeating();//重复执行某个方法,一般在Start方法中执行。
CancelInvoke();//取消 重复执行某个方法。
倒计时、发射子弹的三种方式
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
/// <summary>
/// 倒计时器
/// </summary>
public class CountdownTimer : MonoBehaviour
{
public int second = 120;
private Text txtTimer;
private void Start()
{
txtTimer = GetComponent<Text>();
//重复调用(要执行的方法名称,开始调用时间,调用间隔)
InvokeRepeating("Timer", 1, 1);
//延迟调用
//Invoke("需要调用的方法名称", 调用时间);
}
private float nextTime = 1;//下一次改变时间
private void Update()
{
//如果(按住鼠标左键 && nextTime <= Time.time)
// 则发射子弹 nextTime = Time.time + 0.1f;
//如果(按住鼠标左键)
//totalTime += Time.deltaTime;
// if(totalTime >=0.1f)
// 则发射子弹 totalTime = 0;
//沿多个路点移动,到达目标等待一段时间。
//如果到达目标点
//totalTime += Time.deltaTime;
// if(totalTime >=3)
// 设置目标点 totalTime = 0
//Timer();
}
//Time.time 实现
//试用场合:发射子弹
private void Timer1()
{
//如果时间到了
if (nextTime <= Time.time)
{
second--;//119 1:59
txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
nextTime = Time.time + 1;//在当前时间上增加1s
if (second <= 10) txtTimer.color = Color.red;
if (second <= 0) enabled = false;
}
}
//Time.deltaTime 实现
//试用场合:沿多个路点移动,每次到达路点等待一段时间。
private float totalTime = 0;
private void Timer2()
{
//累加每帧消耗时间
totalTime += Time.deltaTime;
//如果1s
if (totalTime>=1)
{
second--;//119 1:59
txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
totalTime = 0;//清空累加的时间
}
}
//InvokeRepeating 实现
//试用场合:计时器。每间隔固定时间 执行1次
private void Timer()
{
second--;//119 1:59
txtTimer.text = string.Format("{0:d2}:{1:d2}", second / 60, second % 60);
if (second <= 0)
CancelInvoke("Timer");//取消调用
}
}
输出现实世界的时间
print(DateTime.Now);
帧数
print(Time.frameCount);
每秒执行一次
如果你想在Unity中每秒执行一次操作,你有几种选择。以下是一些常见的方法:
使用Update
函数(可用)
最简单的方法是使用Update
函数,并在其中添加一个检查来确保每秒只执行一次操作。由于Update
函数的执行频率与帧率有关,你可能需要记录自上次执行以来的时间,并在达到1秒时执行操作。
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
private float lastTime;
void Update()
{
if (Time.time - lastTime >= 1.0f)
{
lastTime = Time.time;
// 每秒执行一次的操作
Debug.Log("每秒执行一次");
}
}
}
使用InvokeRepeating
方法
另一种方法是使用InvokeRepeating
,它允许你以固定的时间间隔重复调用一个方法。
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
//执行InvokeRepeating方法,0秒后执行(立即执行),每1秒执行1次。
InvokeRepeating("DoSomethingEverySecond", 0.0f, 1.0f);
}
void DoSomethingEverySecond()
{
// 每秒执行一次的操作
Debug.Log("每秒执行一次");
}
public void Close()
{
//停止InvokeRepeating方法
CancelInvoke("DoSomethingEverySecond");
}
}
在这个例子中,DoSomethingEverySecond
方法会在游戏开始时立即执行,然后每秒执行一次。
使用Coroutine
(未测试)
你还可以使用Coroutine
来实现每秒执行一次的操作。
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
StartCoroutine(DoSomethingEverySecond());
}
IEnumerator DoSomethingEverySecond()
{
while (true)
{
yield return new WaitForSeconds(1.0f);
// 每秒执行一次的操作
Debug.Log("每秒执行一次");
}
}
}
在这个例子中,DoSomethingEverySecond
协程会在每秒执行一次循环中的代码块。
以上方法都可以实现在Unity中每秒执行一次操作。你可以根据你的具体需求和场景选择最适合的方法。