Unity中的Update与FixedUpdate

这篇具有很好参考价值的文章主要介绍了Unity中的Update与FixedUpdate。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:前言

例如一个RPG游戏,主角的移动通过在Update中用速度乘以时间差Time.deltaTime模拟,当某帧卡顿了很久,Time.deltaTime将会变得很大,导致下一帧主角会无视地图障碍直接瞬移到一个很远的距离导致穿模,超出地图等bug,而在FixedUpdate中会避免此问题,下面就针对Update与FixedUpdate深入研究一下


二:区别

Unity的物理系统是通过FixedUpdate来执行的

——执行顺序
Update在FixedUpdate之后执行。例如有两个脚本A和B,A中有Update和FixedUpdate,B中有FixedUpdate,A中有Update会在A和B的FixedUpdate都执行后再执行


——执行时机
Update是每帧执行(每次渲染新的一帧的时候),与设备的性能和Update中逻辑的复杂程度有关,使用Time.deltaTime可以获取到与上一帧的时间差,Unity限定最大值为0.333秒
FixedUpdate也是每帧执行,但是它帧率固定(由Time设置中的Fixed Timestep参数决定 )


三:重点

一个逻辑帧(一次Update算一个逻辑帧)中可能会执行多次FixedUpdate,Fixed Timestep默认设置为0.02s,则一秒会准确执行50次FixedUpdate,而Update的执行次数会根据设备的帧率影响
例如Update中有很复杂的逻辑运算,当某帧卡顿了很久后,Update执行了一次,而FixedUpdate会执行很多次,它会将中间丢失的帧补回来,假设这一帧Time.deltaTime=0.1,则FixedUpdate会执行0.1/0.02=5次
Unity会将较大的帧间隔切分成多个固定的小时间段计算,但这种切分不能是无节制的,FixedUpdate中的运算也会带来计算负荷,如果为了追上帧间隔而带来太多FixedUpdate调用会让下一帧的时间更长,而更长的帧间距则需要更多的FixedUpdate来追上,这会导致一个恶行循环,所以FixedUpdate的调用会有一个时间限制,通过Time设置中的Maximum Allowed Timestep参数,这个参数表示两帧之间FixedUpdate计算的最长时间,当超过这个时间的帧间隔后FixedUpdate会停止计算,这样可以实现效果与性能的平衡
反之如果在FixedUpdate中执行复杂的逻辑运算,是非常可怕的,当某帧卡顿了很久后,Update执行了一次,Unity会执行多次的FixedUpdate来追上,而现在卡顿的根本是FixedUpdate而不是Update,例如需要执行16次FixedUpdate,而每次FixedUpdate又会造成卡顿,进入了恶行循环文章来源地址https://www.toymoban.com/news/detail-520887.html

using UnityEngine;

public class Test : MonoBehaviour
{
    int count = 0;
    private void FixedUpdate()
    {
        count++;
        Debug.Log("FixedUpdate " + count);
    }

    float timer = 0;
    private void Update()
    {
        int v = 999;
        for (int i = 0; i < 999999999; i++)
        {
            v += v * i;
        }
        timer += Time.deltaTime;
        Debug.Log(Time.deltaTime);
    }
}

到了这里,关于Unity中的Update与FixedUpdate的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解python中的update函数

    update() 函数是Python字典对象的一个内置方法,用于将一个字典的内容更新到另一个字典中。 update() 函数的语法如下: 其中, dictionary 是要更新的字典对象, iterable 是一个可迭代对象, 通常是另一个字典、一个包含键值对的元组列表、或者是另一个可迭代的字典。 update() 函

    2024年02月10日
    浏览(44)
  • 【Unity】认识常用的生命周期函数(Awake、Start、Update...)

    游戏的本质就是一个死循环 每一次循环都会处理游戏逻辑 并 更新一次游戏画面 之所以能看到画面在动 是因为 切换画面速度达到一定速度时 人眼就会认为画面是动态且流畅的 一帧就是执行了一次循环 Unity底层已经封装好了这个死循环 我们只需要利用Unity的生命周期函数的

    2024年02月02日
    浏览(34)
  • Unity 之 使用定时调用与Update 正常帧更新的运行答疑

    就是说,当我们在Start 函数里面定义了一个InvokeRepeating 函数,那么我们又在Update 定义了一个基本操作,想联合控制物体一个往返的一个运动时,我们应该怎么办? 就是说系统是怎么编译的呢? 这里我提供两个代码,大家看一下区别 using System.Collections; using System.Collections.G

    2024年02月09日
    浏览(36)
  • SQL UPDATE 语句(更新表中的记录)

    UPDATE 语句用于更新表中已存在的记录。 还可以使用AND或OR运算符组合多个条件。                 SQL UPDATE 语法 具有WHERE子句的UPDATE查询的基本语法如下所示:  请注意  更新表中的记录时要小心! 要注意SQL UPDATE 语句中的 WHERE 子句!   WHERE子句指定哪些记录需要更新。如

    2024年04月28日
    浏览(42)
  • Python中的append()、add()、extend()、update()用法详解

    在列表中, append函数 用于向列表的末尾添加一个元素。例如: 需要注意的是,append函数只能添加一个元素,如果要添加多个元素,可以使用 extend函数 或者使用 加号运算符 : 在集合中,append函数并不存在。如果要向集合中添加元素,可以使用 add函数 : 需要注意的是,集

    2024年04月25日
    浏览(38)
  • React16源码: React中的update和updateQueue的源码实现

    React中的update和updateQueue 1 )概述 在 ReactDOM.render 过程中,还需要创建一个 update 对象 update 用于记录组件状态的改变的一个对象,它存放于Fiber对象的 updateQueue 中 updateQueue ,它是一个单向链表的结构,一次整体的更新过程当中 可能在这个queue里会存在多 Update 在这次更新的过

    2024年02月02日
    浏览(39)
  • 深入理解Linux中的“sudo apt-get update“命令

    在Linux操作系统中,sudo apt-get update 是一个常用的命令,用于更新系统中可用软件包的信息。这个命令允许用户获取最新的软件包列表和更新信息,以确保系统上的软件保持最新状态。在本文中,我们将详细解释sudo apt-get update命令的用法和工作原理。 目录 1.什么是 \\\"sudo apt-g

    2024年02月05日
    浏览(51)
  • Phaser笔记-scene中的preload、create、update、player、键盘控制

    一般phaser最简单的配置文件如下: 其中scene有3个函数:preload、create、update preload:是在create函数前调用的,一般用于资源的加载; create:preload完成后,就会调用到这函数,这个函数一般用于构造界面,关联玩家键盘,游戏大部分逻辑事件等等等; update:会按周期进行调用,

    2024年02月11日
    浏览(32)
  • Unity VR Pico apk安装失败:INSTALL_FAILED_UPDATE_INCOMPATIBLE

    PICO4企业版。安装apk,报错“安装失败。(所属的Unity项目打包的apk,被我在同一台pico4安装了20次+) PIco4发布使用UNITY开发的Vr应用,格式为apk,安装的时候发生解析错误_pico安装apk-CSDN博客 去Android---data文件夹下找到,该该应用的文件夹 。整个删掉。然后再安装apk,应该就可

    2024年02月03日
    浏览(73)
  • SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用

    什么是 NULL 值? NULL 值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为 NULL 值。需要注意的是,NULL 值与零值或包含空格的字段不同。具有 NULL 值的字段是在记录创建期间留空的字段。 如何测试

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包