首页 > 解决方案 > 物体在移动时没有做出相应的动作

问题描述

我正在开发这款坦克游戏,您可以使用键盘输入移动坦克并使用鼠标输入瞄准炮塔。

对于坦克运动,我在更新方法中使用此代码:

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

有没有办法防止这种坦克运动的烦躁,还有没有办法把坦克的车身和炮塔都连接起来,同时让它们各自独立旋转,也让坦克适当地爬上地形。

我是统一的初学者,如果我的问题很明显或很容易,我很抱歉。如果我能得到任何直接的解决方案,我将非常感激。

标签: c#unity3dphysics

解决方案


请注意,TranslateRotate都有最后一个可选参数Space relativeTo = Space.Self。这意味着默认情况下总是Space.Self使用:

如果relativeTo被忽略或设置为Space.Self相对于变换的局部轴应用移动。(在场景视图中选择对象时显示的 x、y 和 z 轴。)如果relativeToSpace.World相对于世界坐标系应用的移动。

您的坦克对象开始“飞行”和“倾斜”,因为您在其自己的本地坐标而不是世界坐标中旋转和平移。你应该改用

transform.Rotate(0, x, 0, Space.World);
transform.Translate(0, 0, z, Space.World);

在工作空间中执行平移和旋转。


推荐阅读