如何使用角色控制器操作Time.timeScale

本文关键字:Time timeScale 操作 控制器 何使用 角色 | 更新日期: 2024-11-01 03:09:20

我正在尝试做类似原型游戏SuperHot的东西,其中"只有当你移动时,时间才会移动"。

我能想到的方法包括使用输入或字符控制器的速度来操作Time.timeScale。

以下是我是如何做到的:

using UnityEngine;
using System.Collections;
public class TimeMechanic : MonoBehaviour {
private float targetScale;
// Use this for initialization
void Start ()
{
    targetScale = 0.02f;
}
// Update is called once per frame
void Update ()
{
    Time.timeScale = targetScale; //setting the timeScale
    if (Input.GetAxis ("Horizontal") != 0 || Input.GetAxis ("Vertical") != 0)
    {
        targetScale += 0.03f; //incrementing the variable by 0.03
        if (targetScale > 1f)
        {
            targetScale = 1f; //limits the variable to 1 at max
        }
    }
    else
    {
        targetScale -= 0.03f; //decrementing the variable by 0.03
        if (targetScale < 0.02f)
        {
            targetScale = 0.02f; //limits variable to 0.02 at min
        }
    }
    Debug.Log (targetScale);
}

}

我的问题:

  1. 使用角色控制器的速度操纵时间刻度是否可行?
  2. 在此代码中我应该改进哪些内容?

如何使用角色控制器操作Time.timeScale

这将取决于您的算法。事实上,当你减少timeScale时,它将具有循环依赖性。取决于Input会更好,但这取决于您期望的外观和感觉。

当时间刻度设置为零时,游戏基本上暂停,如果所有 函数与帧速率无关。

除了 realtimeSinceStartup 之外,timeScale 一直影响着 时间类的增量时间测量变量。

如果您降低时间刻度,建议也降低 Time.fixedDeltaTime由相同的量。

当时间刻度设置为 零。

由于Physics最优选FixedUpdate因此有必要注意上述几点,除非您的游戏会有很多违规行为。