【问题标题】:Smooth ball movement (Unity)流畅的球运动(Unity)
【发布时间】:2020-02-20 21:31:24
【问题描述】:

我正在开发一个带球的简单 3D 游戏。而且球移动不顺畅。

while (i < Input.touchCount)
        {
            if(Input.GetTouch(i).position.y < ScreenHeight / 2)
            {
                if (Input.GetTouch(i).position.x > ScreenWidth / 2)
                {
                    //move right
                    rigidBody.velocity += new Vector3(0.75f, 0, 0);

                }
                if (Input.GetTouch(i).position.x < ScreenWidth / 2)
                {
                    //move left
                    rigidBody.velocity -= new Vector3(0.75f, 0, 0);

                }
            }
            ++i;
        }

如您所见,我使用了刚体的速度,它开始缓慢,然后快速移动。但我希望球在触摸屏幕后立即以恒定速度移动。 它也随着抽搐而移动,并不顺利。 你能帮我改进一下吗?

【问题讨论】:

  • 如果您希望它以恒定速度移动,您应该使用常规分配:= 而不是-= 和+=。所以应该是rigidBody.velocity = new Vector(x,y,z)
  • 我不得不提一下,球只是停留在原地,只在 x 轴上移动。
  • 它不在 y 轴上移动,因为向量中的 Y 值为 0
  • 值得一提的是,球是使用刚体的,所以物理学会发挥作用。每帧上的所有 += 和 -=(除非 GetTouch 类似于 GetKeyDown)可能也不理想,因为它会继续加速球。我建议按照@Chronicle 说的做,然后可能进入刚体属性并将球设置为运动学,这样外力就不会与之相互作用。
  • 嗨,@Davrick 考虑使用 Lerping 以使动作平稳运行,请参阅 docs.unity3d.com/ScriptReference/Vector3.Lerp.html

标签: c# unity3d


【解决方案1】:

请记住,物理计算需要在 FixedUpdate() 事件方法中:

来自MonoBehaviour.FixedUpdate()

用于物理计算的独立于帧速率的 MonoBehaviour.FixedUpdate 消息。

MonoBehaviour.FixedUpdate 具有物理系统的频率;它被称为每个固定帧率帧。在 FixedUpdate 之后计算物理系统计算。 0.02 秒(每秒 50 次调用)是调用之间的默认时间。使用 Time.fixedDeltaTime 来访问这个值。

参考资料:

希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2022-08-19
    相关资源
    最近更新 更多