c# - 物体在移动时没有做出相应的动作
问题描述
我正在开发这款坦克游戏,您可以使用键盘输入移动坦克并使用鼠标输入瞄准炮塔。
对于坦克运动,我在更新方法中使用此代码:
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
有没有办法防止这种坦克运动的烦躁,还有没有办法把坦克的车身和炮塔都连接起来,同时让它们各自独立旋转,也让坦克适当地爬上地形。
我是统一的初学者,如果我的问题很明显或很容易,我很抱歉。如果我能得到任何直接的解决方案,我将非常感激。
解决方案
请注意,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);
在工作空间中执行平移和旋转。
推荐阅读
- android - 将一个号码添加到一个已经存在重复号码的列表中
- c - 多行 C' 分号背后的想法是什么?
- ios - 将 iPhone 连接到运行 OSX 的 libvirt 虚拟机
- mql4 - 从 metatrader4 向 python 中的电报机器人发送消息
- c# - 选择实体框架的版本后没有任何反应
- java - 如何在 JavaFX 中获取 ScrollBar 的拇指值范围?
- vb.net - 如何将 As Clause (type) 添加到使用 SyntaxFactory 创建的属性中?
- java - 允许 Java JDK 11 HttpClient 的不安全 HTTPS 连接
- json - json-c json_object_to_json_string() 等价 api 在 jansson 库中
- php - 源代码如何管理空白和连接