我正在从事这款坦克游戏,您可以使用键盘输入移动坦克,并使用鼠标输入瞄准炮塔。
对于坦克移动,我在更新方法中使用以下代码:
x = Input.GetAxis("Horizontal") * Time.deltaTime * rotationSpeed;
z = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);
但是我得到的结果类似于此视频(即使锁定轴的旋转): https://streamable.com/tm33b
总之,有没有防止这种烦人的坦克运动,总之有没有在不使之独立旋转的情况下使坦克的车体和炮塔都固定的问题,还使坦克适当地攀登了地形。
我是团结的初学者,对于我的问题很明显或很简单,我感到抱歉。如果我能直接解决这个问题,我将非常感谢。
答案 0 :(得分:0)
请注意,Translate和Rotate都有最后一个可选参数Space relativeTo = Space.Self
。这意味着默认情况下始终使用Space.Self
:
如果未设置 relativeTo 或将其设置为
Space.Self
,则将相对于变换的局部轴应用移动。 (在“场景视图”中选择对象时显示的x,y和z轴。)如果 relativeTo 为Space.World
,则相对于世界坐标系应用移动。
您的坦克项目开始“飞行”和“倾斜”,因为您旋转并平移了它自己的局部坐标而不是世界坐标。您应该改用
transform.Rotate(0, x, 0, Space.World);
transform.Translate(0, 0, z, Space.World);
在工作空间中执行平移和旋转。