c# - Unity 3D 计时器似乎运行得太快

标签 c# unity-game-engine

当用户按下按钮时,fwdi 被设置为 1,从而启动此 if 语句。对我来说,如果我每次更新将 fwdi 减少 0.1 并将玩家移动 0.1,那么一切都应该在 1 秒标记内完成,但移动比 1 秒快得多,这对我来说似乎是合乎逻辑的。我有一个也播放的动画,需要 1 秒,但它们不匹配。

编辑

void Update ()
{

    if (fwdi > 0.0f)
    {

        fwdi = fwdi - 1.0f * Time.deltaTime;
        amountToMove.y = 1.0f * Time.deltaTime;
        transform.Translate (amountToMove);
        if (fwdi == 0.0f)
        {

            amountToMove.y = 0.0f;
            fwdi = 0.0f;
        }
    }
}

最佳答案

您需要做的就是补偿帧时间(IE:在 60fps 下,每秒调用更新 60 次)

void Update ()
{
    if (fwdi > 0)
    {
        amountToMove.y = 0.1f*Time.deltaTime;
        transform.Translate (amountToMove);
        fwdi = fwdi - amountToMove.y;
        //This code bellow looks redundant, and probably unnecessary
        if (fwdi == 0)
        {
            amountToMove.y = 0;
            fwdi = 0f;
        }
    }
}

还可以考虑在FixedUpdate上进行移动。固定更新的工作方式与更新类似,但有一些关键区别:

-Fixedupdate 优先于普通更新功能,

-unity 固定更新的默认调用上限为每秒 20 次

通常建议您将可从可预测的更新间隔中受益的轻量级进程放在固定更新上,例如运动和物理。

注意::将 FixedUpdate 中的所有内容乘以 Time.fixedDeltaTime 仍然是一个好主意,以防万一 Fixedupdate 无法达到其目标每秒计数 20 个刻度。

关于c# - Unity 3D 计时器似乎运行得太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674699/

相关文章:

c# - 如何从表示为 float 组的高度图创建 3D 网格

android - 在 Android/iOS 上获取默认设备方向(横向或纵向)

c# - 为什么接口(interface)成员没有访问修饰符?

c# - 用于输入验证的自定义中间件

ios - Xcode 中的本地化按钮有什么作用?

ios - Firebase Unity iOS 问题

iphone - 我尝试构建的任何应用程序都会在 Unity 初始屏幕上崩溃

c# - 使用 WinSCP 从 SFTP 位置读取文件内容

c# - 什么是 Java 等同于 C# 的 Windows 窗体,用于轻松快速地构建 GUI 应用程序

c# - KnockoutMVC 提交按钮不起作用