首页 > 解决方案 > 船在转弯时试图倾斜它时会在z轴上移动位置吗?

问题描述

我正在统一制作一个 2.5D 游戏,它是关于宇宙飞船穿越太空的,更像是传统的宇宙飞船游戏。

当玩家像飞机一样转动时,我希望我的飞船稍微倾斜,就像这架飞机正在转动一样:

就像这架飞机正在转弯

这是我的屏幕船在转弯时的样子:

这是我的屏幕船转弯时的样子

我想让它倾斜一点,这是我现在的时刻代码

    void Turn()
    {
        float RotationCount = Input.GetAxis("Horizontal");
        float TurnShip = turnSpeed * Time.deltaTime * Input.GetAxis("Horizontal");
        if (Input.GetAxis("Horizontal") < 0)
            ForwardTransform.Rotate(0, TurnShip,10*Time.deltatime)
        else if (Input.GetAxis("Horizontal") > 0)
            ForwardTransform.Rotate(0, TurnShip,-10*Time.deltatime);


        //if (RotationCount < 0)
        //    myT.Rotate(0, TurnShip, 9);
        //else if (RotationCount > 0)
        //    myT.Rotate(0, TurnShip, -9);
    }

这是旋转脚本,下面是 thurst 脚本

    void Thrust()
    {

        if (Input.GetAxis("Vertical") > 0.75f)
        {
            V = Input.GetAxis("Vertical");
        }


        myT.position += myT.forward * movementSpeed * Time.deltaTime * V;
    }

但是当我使用这个代码时,船会改变它在 Z 轴上的位置,因为船头会根据运动向下或向上转动

如何在不改变 Z 轴位置的情况下倾斜船

发货初始位置:

发货初始位置

当用户转船时:

当用户转船时

我应该以什么其他方式转动我的船?

标签: c#unity3dmonodevelopgame-physicsgame-development

解决方案


为什么不拥有一个中间物体并让宇宙飞船成为它的孩子呢?

因此,您可以旋转这个中间对象,而不是旋转船,然后您可以根据运动移动船。这里的技巧是中间物体只在一个轴上旋转,而船只在一个轴上旋转(相对于它的父变换)。

这将避免任何欧拉角/四元数/移动参考框架业务,对于这样一个简单的问题,您应该需要这些业务。


推荐阅读