微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向前和侧身球员运动

如何解决向前和侧身球员运动

所以我和我的朋友正在开发一款游戏,您可以像雪球一样从山上滚下,避开障碍物。然而,我们的行动遇到了麻烦。我们希望我们的雪球获得的速度越大,它不会击中任何东西的时间越长。我们的前进运动由

控制
void FixedUpdate(){
rb.veLocity += Physics.gravity * 3f * rb.mass * Time.deltaTime; 

//to accelerate

rb.AddForce(0,32 * rb.mass);
}

我们正在对按键输入施加横向力

if (Input.GetKey(ControlManager.CM.left))
        {
          if (rb.veLocity.x >= -15 - (rb.mass * 8))
             {
                 rb.AddForce(Vector3.left * sidewaysForce * (rb.mass * .5f),ForceMode.VeLocityChange);
             }
        }
        if (Input.GetKey(ControlManager.CM.right))
        {
            
            if (rb.veLocity.x <= 15 + (rb.mass * 8))
            {
                rb.AddForce(Vector3.right * sidewaysForce * (rb.mass * .5f),ForceMode.VeLocityChange);
            }
        }

质量随着比例的增加增加,反之亦然。

当雪球大于一定比例时,问题就出现了。一旦它到达那个点,它就会在您按下按键时向左和向右大幅加速,然后在您松开时迅速恢复到前进速度。我认为这与质量和施加的力的复合方式有关。

是否有更好的方法来加速我们的雪球下坡或左右移动?我试过 transform.Translate 和 transform.MovePosition,但它们会导致左右移动断断续续。

解决方法

一方面,大多数运动代码应该将速度乘以 Time.deltaTime。在一个假设的游戏中,如果你每帧增加一定数量的速度,那么拥有强大的 60 fps 计算机的人的速度将是糟糕的 30 fps 笔记本电脑游戏玩家的两倍,因为他们的加速频率较低。为了解决这个问题,我们将加速度乘以 Time.deltaTime,这是自上一帧以来的时间。

代替这段代码,帧率决定速度;

Vector3 example = new Vector3(1,1,1);
void Update()
{
   rb.AddForce(example);
}

我们将使用此代码。如果帧率减半,Time.deltaTime 将是两倍,因此对于使用它的每个人来说,加速度都是恒定的。

Vector3 example = new Vector3(1,1);
void Update()
{
   rb.AddForce(example * Time.deltaTime);
}

这个问题可能还有另一个来源,尽管摆脱帧速率依赖性是一个很好的起点。看起来您已经将 Time.deltaTime 用于向下速度,但尚未用于横向运动。即使它不能解决问题,使用 Time.deltaTime 对于任何一致的游戏都是必不可少的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。