Unity—Rigidbody钢体移动时抖动问题

Rigidbody移动时抖动问题

撞墙抖动

Unity中物体移动有非常多的方式;

比如:

transform.position += dir*speed*Time.deltaTime;
transform.Translate(pos, Space.World);

但是这种方式与碰撞结合时,是先位移在判断碰撞,会导致撞墙抖动

而钢体中修改速度,或是添加力,是先判断碰撞在移动,有效解决撞墙抖动问题;

RigidBody rig;
rig.AddForce(dir*speed);

rig.velocity = new Vector3(pos.x, 0, pos.z) * speed * Time.fixedDeltaTime;

众所周知,人物移动时乘以Time.fixedDeltaTime,相当于逻辑在FixedUpade中调用,每间隔0.02s移动一次;

移动抖动

如果你的摄像机跟随人物移动,一般会将摄像机逻辑写在LateUpdate中处理,保证每一帧的最后调用,有效保护游戏的公平性;

但这样钢体移动和摄像机移动不同步,会导致移动时屏幕不断抖动;

所谓这里的摄像机逻辑建议都写在FixedUpdate周期中;

public class CameraController : MonoBehaviour
{
    public Transform hero;
    private float distacne = 6.5f;
    private float height = 6.3f;
    public void FixedUpdate()
    {
        transform.LookAt(hero);
        transform.position = hero.position + new Vector3(distacne,height,0);
    }
}

移动不下落

由于直接修改钢体速度,速度y赋值为0会导致松了移动键物体才会下落,导致悬空走的情况;

解决方式,将钢体速度的y值赋值为-0.3即可,模拟自由落体的重力;

posted @   小紫苏  阅读(2999)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示