unity中time.deltatime函数为什么要和向量相乘

time.deltatime函数为什么要和向量相乘。很多人看到code里边,讲解某行代码的时候老师总是将移动的向量和time.deltatime相乘,提问老师为什么这样做的时候,老师的解释是让不同帧数的电脑可以同步,具体原因是因为time.deltatime是每帧运行的时间。但是大家搞不懂为什么是这样的效果,他的原理具体是什么,因为这个概念比较抽象,所以理解起来有点困难,但是我举个简单的例子大家就明白了。一场钓鱼比赛,参加的选手a和b两个人,要在一小时内决出胜负,比赛的规则是看谁一小时内钓的鱼比较多。a是菜鸟,调配的鱼饵和经验无法和b相比,所以两个人的差距很大。一小时中,a钓了30条,b钓了60条。所以,这里我们可以明白简单的事情就是,计算机的CPU在进行画面的渲染,每一次渲染就是刷新一次画面,我们称之为一帧,因为CPU的不同,会导致不同的电脑,在同样的时间,刷新的帧数不一样。也就和钓鱼的选手一样,在同样的时间里,他们调到的鱼是不一样的。所以,我们在同样的时间里,让两台不同性能的电脑运行同样的code,就会有运行时间的差异。在我们的unity中,我们知道我们的脚本是有生命周期的,就是当游戏运行的时候,一些函数会自动调用,只不过他们的调用时机不一样,而我们会经常将物体移动的逻辑写在update中,我们都知道update中,他的运行时机是每一帧运行一次。我们就可以简单的理解为,update在计算器的帧数为一秒钟60帧的时候,会调用60次。是不是就相当于我们的钓鱼者一分钟钓了三十条鱼一样,他们都存在着个体差异,不同的钓鱼者规定的时间调到的鱼不一样,不同的电脑规定的时间调用update的次数也不一样,是不是这样呀?那么,我们就知道了,同样的规定时间,我们交给不同的机器,或者钓鱼者相同的任务,得到的结果可是不一样的。比如说,我们需要30条鱼,不多也不少,因为钓多了鱼,鱼塘的塘主就会和我们多收费,我们只带了三十条鱼的购买资金。但是假如说,你把这个任务,安排给了两个人,告诉他们开始钓鱼,钓一小时。很显然,a本身一小时钓30条,就刚好完成任务,但是b就是60条,就让我们浪费钱,甚至会被鱼塘塘主扣住不让走。不同的电脑也是,本来我只想让他调用一次update让物体往前移动五个单位。但是我在我的十年古董机上确实是一秒移动了五米,但是在你的电脑上却一秒钟移动了五十米,这是为什么呢?因为不同的电脑,一秒钟运行的帧数不一样。我一秒钟运行了五次,你可能却运行了五十次。因为CPU就好比不同的钓鱼者,他们的能力不一样,计算的快慢不一样,好的CPU计算复杂的数学公式,甚至会领先落后的cpu几个单位。钓鱼者也是。那我们怎么办?于是聪明的我告诉a和b,你们两个一共要钓30个鱼,一人15个,而且得钓满一个小时,这里的老板不让人占着空位不钓鱼。他们两个计算各自的时间,计算出一小时需要钓15个,如果他们本身的实力的话,都需要放慢速度。a得将速度放慢一半。b得将速度放慢4倍。他们得依靠自己得聪明才智把时间控制在钓满一小时,于是得想办法让每次钓鱼花费得时间平摊。这样,他们是不是控制时间通过他们自己控制得方法,得到了相同得效率呀?是不是都变成了一小时钓15条呀?他们是如何办到的,我们就不管了,我们只需要知道,在我们得计算机中,当update调用得时候,因为CPU得差异导致了它调用次数得不一致,所以,我们是不是得需要一种方式,让他们也可以在相同得时间做得结果是相同的呀?接下来就是见证奇迹的时刻。a的CPU一秒钟运行60帧,如果让他一秒钟移动120米,那么,他要做的事情就是让他这一秒钟的帧数,就是一秒钟运行了几次update的次数,一秒钟平摊在这个上面,如何平摊呢?平均数?那可就大错特错了,我们需要的强大武器就是我们今天的主角,time.deltatime。他可以获得每一帧运行的时间,当我们调用update,他是不是在每次渲染结束后调用呀?渲染结束是不是就完成了一帧的渲染呀?是不是就有了我们要的time.deltatime,也就是每一帧的时间呀?每一帧的时间它都是以秒为单位,渲染一帧大部分在0.1-0.2毫秒左右了。我们的1秒中CPU渲染了假如60帧,那么这60帧每一帧的时间虽然可能不一样,但是你知道,他们加起来是一秒,对不对?那么你又知道,假如我们要移动120米,120米乘以1等于1,那么120米,在每一帧中,乘以他的渲染所需时间的秒数,假如是0.2秒,是不是相当于120乘以0.2,你知道这些时间加够一秒的时候,120乘以的其实就是1,能不能理解这个概念呀?所以,无论你是多少调用次数,你的总时间都逃不过一秒内你运行了多少帧,我只需要将你的每个帧渲染用的时间知道,你无论什么电脑,运行了几次update,你运行的快,time.deltatime的时间就短,运行的满,time.deltatime的时间就长,但是不妨碍他们的运行时间都是相同的现实时间,他们每帧的运行时间,我只需要乘以他,就相当于让这一帧按照它应该移动的距离,移动多少,总是,它们这60帧的最后总时间是一秒,他们的总移动距离,是120米。这样我们是不是就和钓鱼佬一样,巧妙的完成了将不同机器运行同样的代码得到同样的结果了呀?
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章