Unity3D中关于Update与抖动问题

结论:
FixedUpdate频率固定更新,通常更新物理逻辑
Update每帧更新,通常更新输入
LateUpdate是在所有更新种类的最后更新
尽量少用Update,不然顺序不好掌控。而更新实在无法掌控的时候,用Script Excution Order

在这里插入图片描述
一般情况下,抖动来源是您对Update的用法。

在很久很久以前,网上一般说角色的移动用FixedUpdate,也可以用Update,但是移动要乘以Time.deltaTime。于是我的游戏《彩虹之岛:冒险的开始》一开始使用FixedUpdate监听输入来让角色移动。一开始都还对,但是我发现有20%左右的几率按跳跃跳不起来。然后我就全部用Update,里面乘以Time.deltaTime来保证移动是流畅的。当然相机是放在LateUpdate里面,保证相机在所有位移计算结束后计算相机的位置,保证了相机拍摄的东西都是在正确的地方。
在这里插入图片描述
而我的第一个在steam发售的3DARPG作品《绿野白银树》也是使用了同样的方法,只不过角色的位移交给了动画去控制,角色也成为了不会跳的不死人开始传火,代码基本没有管物理了。但我后来发现,没有垂直同步的状态下,在Update里乘了Time.deltaTime的值会变小。可能是unity的Bug,但这导致了物理运动在Update里乘以Time.deltaTime的做法应该不是正确的做法。
在这里插入图片描述
所以我的新作2D横版RPG《绿野玩具城》就遇见了全新的问题。
卡顿
这个图我使用update输入左右控制角色(乘以了Time.deltaTime的),虚拟摄像机跟随角色移动,大脑摄像机跟随虚拟摄像机移动,背景跟随大脑摄像机移动,背景发生抖动(感觉角色都在抖)。我思考过改成3D的,背景就放在很远的地方就好了。但是这样就不能用cinemachine的边缘限制等功能了。我要用cinemachine!

我经过研究后作出了如下修改:
我最后还是继续使用正交摄像机方便使用cinemachine各种功能
对角色操作长按类按键放FixedUpdate,触发类按键放Update
大脑摄像机用SmartUpdate(我暂时不知道这是什么玩意儿,看名字应该是比较聪明的亚子)
背景计算用LateUpdate

但是这样还是会抖动,按照原理应该需要把背景计算确实地放在摄像机的聪明更新之后,但是那个代码我们是看不见的,只好使用Script Excution Order,把背景计算放在最后,就行了!
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值