如何解决播放器球上出现的浮动故障?

时间:2019-07-16 16:40:29

标签: c# unity3d computer-science

我正在使用Unity3D制作游戏“ Rolling Sky”的副本,您可以在Google / Apple应用商店中找到它。我能够制作一个简单的地板,使球继续前进,也能够使球(Player)左右移动。将球前后移动两次后,它开始在空中漂浮,最终看起来像是改变了轴心。

我想出了一些我认为可行的替代方法,但是我想出了使它正常运行的代码很困难。

1)完全不要旋转球。只要让它平稳地前后移动即可。 ^^可能是我能想到的最好的解决方案。

2)使用CharacterController可以完全控制球对不同事件,场景等的反应。 ^^这可能是我不得不猜测的最必要和最困难的事情。

3)每次我向左或向右移动时,将球移动x个像素。 ^^我认为这会比现在产生更多的故障。

public class PlayerController : MonoBehaviour
{
    public float speed;

    void Update()
    {
        transform.Translate(Vector3.right * speed * Input.GetAxis("Horizontal") * Time.deltaTime);
    }
}

编辑: 我能够提供自己的答案,但是如果有人有其他选择,请随时发布您的解决方案!

2 个答案:

答案 0 :(得分:0)

为防止玩家的球漂浮在天空中,不需要其他代码。只需转到播放器上的“刚体”组件,然后展开“约束”菜单。接下来,选中要冻结旋转的轴框,以防止球如图所示旋转。

点击链接查看图片 here

在这种情况下,我没有将球冻结在x轴上,因为我最终希望对其进行动画处理以使其旋转,就像它向前滚动一样。

答案 1 :(得分:0)

您正在使用transform.Translate

您正在使用Vector3.right


transform.Translate将直接移动球而无需考虑旋转。在平移时,您需要考虑对象的旋转。您还可以使用物理引擎并使用Rigidbody.MovePosition来强制定位,或使用Rigidbody.AddForce来利用物理相互作用。

Vector3.right将使用等于Vector3(1,0,0)的常量值。这与对象的旋转或朝向无关。

我建议浏览Unity's tutorial for a ball-roller,看看它们如何用用户控制的球来完成用户输入的任务。