deltatime_deltatime是什么意思 - CSDN
精华内容
参与话题
  • Time.deltaTime 用法

    千次阅读 2018-03-11 12:49:18
    先说下Unity3d脚步中常用的两个方法:Update():每帧被调用一次FixedUpdate():每隔Time.fixedDeltaTime被调用一次。Time.fixedDeltaTime默认是0.02s,可以通过Edit->ProjectSettings-&...

    先说下Unity3d脚步中常用的两个方法:

    Update():每帧被调用一次

    FixedUpdate():每隔Time.fixedDeltaTime被调用一次。Time.fixedDeltaTime默认是0.02s,可以通过Edit->ProjectSettings->Time来设置


    对游戏有了解的都知道,因为受场景渲染的复杂程度,还有输入的一系列事件等等各种原因影响,游戏画面的帧率是在不断变化的。

    所以,在控制游戏逻辑的过程中,一般是需要按照每帧去处理的(使用Update())。而物理相关的处理,则需要根据时间的变化去处理(使用FixedUpdate())。


    而当我们在Update()中,希望通过每隔一段时间去执行一些逻辑,比如最常见的修改GameObject的Transform,就需要使用Time.deltaTime来达到效果了。

    根本原因,就是帧率在不断变化,Update()被调用的时间并不是线性的。

    如下图,在时间轴上,渲染出的5帧画面Frame_1~Frame_5,以及每帧的时间间隔t1~t4:



    假如我们希望使GameObject每隔一段时间沿X轴正方向移动1个单位,可以在FixedUpdate()中这样写:

    [csharp] view plain copy
    1. <span style="font-size:12px;">transform.Translate(Vector3.right)</span>  

    如果希望通过Update()来实现,把这句写到Update()中是不合适的,你会看到GameObject移动起来出现卡顿。

    解决方法,是给移动的距离乘以Time.deltaTime:

    [csharp] view plain copy
    1. <span style="font-size:12px;">transform.Translate(Vector3.right * Time.deltaTime)</span>  
    这个时候,虽然不会出现卡顿,但是移动的速度会很慢。这个问题后面再解释,并给出解决办法。

    为什么乘以Time.deltaTime之后就好了呢?要解释这个问题,要理解我们如何使GameObject产生了位移。

    Transform的Translate方法接受的参数,实际上是一个位移,而不是速度。

    在FixedUpdate()中,发生的情况是这样的:



    因为FixedUpdate()的调用间隔就是0.02s=t1=t2=t3=t4,所以实际上,位移=速度*时间,transform.Translate(Vector3.right) ==> transform.Translate(Vector3.right * 1)

    1就代表了单位时间Time.fixedDeltaTime。

    因为Update()并不是按照单位时间被调用的,所以要乘以每次的“帧间时间”,而这个时间就是Time.deltaTime。

    这样的操作相当于一个“补偿”,将每次帧率的变化,通过时间的变化同步体现到执行逻辑上。


    剩下一个问题,就是之前乘以Time.deltaTime之后速度变慢。

    其实很好解决,在FixedUpdate()中,我们每次的执行间隔是0.02s,而单位时间体现的是1;同样我们在Update中,执行间隔是Time.deltaTime,为了与FixedUpdate一致,时间单位也需要是1。所以直接乘以FixedUpdate()中真实时间和单位时间的比例(1/0.02 = 50)即可,让Update中的时间也变成单位时间。


    在Update()中需要依赖固定时间去执行的逻辑,都可以通过Time.deltaTime来进行“补偿”。道理是一样的

    展开全文
  • Unity增量时间Time.deltaTime详解

    万次阅读 多人点赞 2018-10-07 04:49:27
    Unity增量时间Time.deltaTime详解 助力新手理解什么是 deltaTime 增量时间 deltaTime 官方的解释我就不说了 官方的解释多数新手都是看不懂的,不然也不会四处搜博文来学习了 增量时间是实时变动的,而且每一帧都...

    如博文无法正常显示,请访问原文地址: https://blog.csdn.net/ChinarCSDN/article/details/82914420


    Unity增量时间详解



    本文提供全流程,中文翻译。

    Chinar 坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)

    Chinar —— 心分享、心创新!

    助力新手理解什么是 deltaTime 增量时间

    为新手节省宝贵的时间,避免采坑!

    Chinar 教程效果:

    简介:
    Update执行了1次,transform.Translate(0, 0, 1/60 * 10)执行一次,物体移动了1/6米
    Update1秒内执行了60次,就是transform.Translate(0, 0, Time.deltaTime * 10)乘以60次
    相当于 =(每帧时间1/60 * 速度 * 60)=10米
    Update1秒内执行了N次,就是transform.Translate(0, 0, Time.deltaTime * 10)乘以N次
    相当于 =(每帧时间1/N * 速度 * N)=10米



    全文高清图片,点击即可放大观看 (很多人竟然不知道)


    1

    deltaTime —— 增量时间



    deltaTime 官方的解释我就不说了

    官方的解释多数新手都是看不懂的,不然也不会四处搜博文来学习了

    ?想要理解增量时间,我们拿物体的移动这种经典案例来说明

    要让一个物体,每秒移动10米,代码如下
    New举例子黑白88

        /// <summary>
        /// 每帧刷新
        /// </summary>
        void Update()
        {
            transform.Translate(0, 0, Time.deltaTime * 10); //物体沿着自身Z轴方向,每秒移动物体10米运动
        }
    

    2

    Why? —— 为什么乘以增量时间



    那么问题来了,多数新手都懵逼在这里: 为什么要乘以增量时间?

    我们假设游戏运行时,1秒是60帧。—— 那就是说60个画面,刷!刷!刷!执行完,耗时1秒。


    如果电脑,或者手机帧数没有到60帧,时而30帧,时而50帧

    那么就会出现,有时候1秒移动了500米 有时候300米,总之每秒都不一样


    所以牛逼的前辈们就想到了解决办法,从而引入了增量时间的概念

    增量时间是实时变动的,而且每一帧都在变动

    1秒30帧,那增量时间就是 1/30 秒
    1秒60帧,那增量时间就是 1/60 秒
    1秒166帧,那增量时间就是 1/166 秒

    这样的设计理念,就保证了无论帧率是多是少,我们让物体1秒移动10米,最后1秒移动的就一定是10米


    公式:路程=速度*时间
    New举例子黑白88

    10米=1秒 * 10米/秒
    10米=(1/60 * 60) *10米/秒
    10米=(1/166 * 166) *10米/秒
    10米=(增量时间 * 1秒总帧数) *10米/秒


    重点:

    Update函数是每帧执行一次,那么经历过一帧耗费的时间就是 增量时间/deltaTime

    1秒内Update执行的次数,就是1秒内执行的总帧数

    所以我们只需要写上 transform.Translate(0, 0, Time.deltaTime * 10)这一个函数
    New举例子黑白88
    Update执行了1次,transform.Translate(0, 0, 1/60 * 10)执行一次,物体移动了1/6米

    Update1秒内执行了60次,就是transform.Translate(0, 0, Time.deltaTime * 10)乘以60次
    相当于 =(每帧时间1/60 * 速度 * 60)=10米

    Update1秒内执行了N次,就是transform.Translate(0, 0, Time.deltaTime * 10)乘以N次
    相当于 =(每帧时间1/N * 速度 * N)=10米


    3

    Wrong —— 误区



    而大家都知道 Update 函数的调用,是很快的。在我们假定的情况下,这1秒就会被调用60次

    而此时我们的代码transform.Translate(0, 0, 10)被执行60次

    每执行一次,物体就会移动10米。60*10=600米,这完全违背了我们让物体每秒移动10米的初衷

    公式:路程=速度*时间
    New举例子黑白88
    Update执行了1次,transform.Translate(0, 0, 10)执行一次,物体就已经移动了10米

    Update1秒内执行了60次,就是transform.Translate(0, 0,10)乘以60次
    相当于 =(10 * 60)=600米

    Update1秒内执行了N次,就是transform.Translate(0, 0, 10)乘以N次
    相当于 =(10 * N)=10N米


    支持

    May Be —— 搞开发,总有一天要做的事!


    拥有自己的服务器,无需再找攻略!

    Chinar 提供一站式教程,闭眼式创建!

    为新手节省宝贵时间,避免采坑!

    先点击领取 —— 阿里全产品优惠券 (享受最低优惠)



    1 —— 云服务器超全购买流程 (新手必备!)


    2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)


    3—— Windows 服务器配置、运行、建站一条龙 !


    4 —— Linux 服务器配置、运行、建站一条龙 !


    技术交流群:806091680 ! Chinar 欢迎你的加入


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

    展开全文
  • 关于deltatime的细讲

    2018-06-07 09:00:15
    首先自我介绍一下,本人属于unity(中下)手,虽然到目前位置已经...最近读到了关于deltatime的讲解,感觉很好,终于清楚的弄懂了为什么我们在让玩家移动时要给移动速度乘上Time.deltatime(高手勿喷),接下...

         首先自我介绍一下,本人属于unity(中下)手,虽然到目前位置已经断断续续学习unity大约有一年半了,但还是没有像样的游戏拿出手,最近正在看一本书,叫做《Unity5实战 使用C#和Unity开发多平台游戏》,里面的细节内容讲的还不错,最近读到了关于deltatime的讲解,感觉很好,终于清楚的弄懂了为什么我们在让玩家移动时要给移动速度乘上Time.deltaTime(高手勿喷),接下来给大家分享一下。

        首先,delta应该就是数学中的正三角符号,都叫一个音,都表示两个值的间隔,当然,deltaTime就表示两个时间点的间隔了。我们应该很清楚,在Update函数里面的内容是每帧调用一次,假设你的计算机是每秒执行60帧,那Update里面的内容在一秒就会执行60次,不同的计算机每秒执行的帧数通常也不会一样,所以每秒执行的结果也会有细微的差别。

        假设在Update里面我们有这么一句代码:

       transform.Translate(0,speed,0);//speed为假设已定义好的速度变量,speed=1;

        这样不加Time.deltaTime,假设计算机是每秒执行60帧,那么这个transform(脚本附着的物体)每秒就走60米,这和我们起初的意愿显然不符,而deltaTime为两帧之间的时间间隔,平均的话就是1/60秒,这样我么再给speed乘上Time.deltaTime,这样最后不就是每秒移动60*(speed*1/60)=speed吗?这就是为什么要乘上Time.deltaTime的原因了。

        本次分享就先到这里了,最近我还在看那本书,有新的收获了再与大家分享。

    展开全文
  • Unity中Time.deltaTime的含义及其应用

    万次阅读 2016-05-16 15:49:44
    相信Unity的开发者或者初学者都对Time.deltaTime并不陌生,我们经常会在代码中用到或者看到它,今天去官方的API文档查了一下,感觉它非常有用,所以翻译一下以引导初学者。 原文网址: file:///Applications/Unity...

    相信Unity的开发者或者初学者都对Time.deltaTime并不陌生,我们经常会在代码中用到或者看到它,今天去官方的API文档查了一下,感觉它非常有用,所以翻译一下以引导初学者。
    原文网址:
    file:///Applications/Unity/Unity.app/Contents/Documentation/html/en/ScriptReference/Time-deltaTime.html

    这里写图片描述

    Unity官方给出的描述是:按照秒来计数,完成上一帧的时间(只读)。通常,使用这个函数来产生与游戏帧速率无关的效果。

    如果你加上或者减去一个值,那你很可能应该乘以Time.deltaTime。当你乘以它以后,你实质上的表达是:我想让这个物体以每秒钟10米的速度移动而不是每帧10米。

    当从MonoBehavior的FixedUpdate中调用的时候,返回的帧速率增量时间。

    请注意,在OnGUI中你不应该依赖Time.deltaTime,因为OnGUI有可能在一帧中被多次调用并且每次deltatime的值都是相同的,直到下一帧刷新。

    请看官方的示例代码:

    using UnityEngine;
    using System.Collections;
    
    public class ExampleClass : MonoBehaviour {
        void Update() {
            float translation = Time.deltaTime * 10;
            transform.Translate(0, 0, translation);
        }
    }

    注:英文水平有限,发现问题请大家与我联系。

    2015.4.22 18:47
    By Mr.Losers

    展开全文
  • Time.deltaTime 每一帧的时间间隔 (我运行时Time.deltaTime 的值是0.2左右,每秒大概50帧数) Time.timeScale 运行速度,给其赋值0为暂停运行(前提是物体运动都有用到Time.deltaTime),1为原来的速度,2则是原来...
  • Time.deltaTime 理解

    千次阅读 2018-12-06 16:26:49
    在初学Unity3d时就不时会用上Time.deltaTime这个变量,初学Unity时不是很懂这个这个变量,那时的理解仅限于“要让数值按每秒多少进行变化时把数值乘以它就对了”   这么理解它其实也不算错   下面来简单理解这...
  • Time.deltaTime 的含义用法

    千次阅读 2017-11-28 22:29:51
    变量deltaTime表示为unity本地变量,作为Time类中的数据在各帧中被更新,在各帧
  • datetime.timedelta类介绍

    万次阅读 多人点赞 2018-01-20 11:38:29
    datetime.timedelta对象代表两个时间之间的时间差,两个date或datetime对象相减就可以返回一个timedelta对象。 如果有人问你昨天是几号,这个很容易就回答出来了。但是如果问你200天前是几号,就不是那么容易答出来...
  • 在Update中使用 Time.deltaTime,获取到的是这一帧的时间,如果游戏卡,帧率低,那这个值就大。如果游戏流畅,帧率高,这个值就小,Time.deltaTime = 1.0f / 帧率 在 FixedUpdate中使用Time.fixedDeltaTime,...
  • C# Time.deltaTime 增量时间

    千次阅读 2017-10-12 15:54:20
    首先 Update()每一帧都会被调用,对于帧更新它是主要的负荷函数。...如果你加或减一个每帧改变的值,你应该与Time.deltaTime相乘。当你乘以Time.deltaTime实际表示:每秒移动物体10米,而不是每帧10米。 void U
  • time是从程序开始执行到现在的时间,deltaTime上一帧完成的时间,fixedTime表示FixedUpdate已经执行的时间,而fixedDeltatime是一个固定的时间增量。 在update()中time、deltaTime获取的是一个正确的值,fixed...
  • Unity Time.deltaTime的作用

    千次阅读 2018-08-23 20:46:11
    初学Unity3D,第一次接触Time.deltaTime这个变量,以下是个人的一些理解,如有错误,欢迎拍砖。 先说下Unity3d脚步中常用的两个方法: Update():每帧被调用一次 FixedUpdate():每隔Time.fixedDeltaTime被调用一...
  • 对Time.deltaTime的简单理解

    万次阅读 2016-10-14 11:30:40
    如果你加上或者减去一个值,那你很可能应该乘以Time.deltaTime.当你乘以它以后,你实质上的表达式是:我想让这个物体以每秒钟10米的速度移动而不是每帧10米。好了,对于初学者的你和我看到这样的中文解释还是会很懵...
  • 教程中看到用下面这个语句,表示的意思是让对象向下,以moveSpeed/s的速度平移,研究了一下为什么:// Update is called ... this.transform.Translate(Vector3.down * moveSpeed * Time.deltaTime); }首先APIpublic
  • Time类里面time、deltaTime、fixedTime、fixedDeltatime的区别(Unity3d)time是从程序开始执行到现在的时间,deltaTime上一帧完成的时间,fixedTime表示FixedUpdate已经执行的时间,而fixedDeltatime是一个固定的时间...
  • 用Unity3D实现太阳系仿真

    万次阅读 热门讨论 2019-12-04 15:09:55
    用Unity3D模拟太阳系仿真 模拟要求 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。 ...而且把对应行星的贴图图片拖到对应的球体...
  • Unity中Time.deltaTime的使用

    千次阅读 2016-04-08 00:12:36
    Time类包含了一个重要的类变量deltaTime,它表示距上一次调用Update或FixedUpdate 所用的时间。  因此通过它可以让游戏对象按照一个常速进行旋转,而不是依赖于它的帧频:  function Update()  {   ...
  • Unity3D对Time.deltaTime初步理解

    千次阅读 2018-09-25 22:27:43
    用Unity3D已经有了一段时间,但是对于Time.deltaTime还是没理解,虽然经常用到,这次主要记下对于Time.deltaTime的学习记录。 官方定义: 按照秒来计数,完成最后一帧的时间(只读)。通常,使用这个函数来产生与...
  • Time.Deltatime 相信大家都用过,今天分析一下与 DeltaTime 相关的东西。 1. 定义上的理解 Unity3D 官网对 Time.Deltatime 给出了这样的描述: The time in seconds it took to complete the last frame ...
  • Unity 方向控制及鼠标滚轮代码控制

    万次阅读 2016-06-11 12:58:42
    方向控制 JAVA语言  #pragma strict function Start () { } var MoveSpeed=5; var RotateSpeed=20; function Update () { if(this.transform.up.y>0 && this.transform.up.y  if(Input.GetKey(KeyCode.W)) ...
1 2 3 4 5 ... 20
收藏数 15,494
精华内容 6,197
关键字:

deltatime