c# - 船在转弯时试图倾斜它时会在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 轴位置的情况下倾斜船
发货初始位置:
当用户转船时:
我应该以什么其他方式转动我的船?
解决方案
为什么不拥有一个中间物体并让宇宙飞船成为它的孩子呢?
因此,您可以旋转这个中间对象,而不是旋转船,然后您可以根据运动移动船。这里的技巧是中间物体只在一个轴上旋转,而船只在一个轴上旋转(相对于它的父变换)。
这将避免任何欧拉角/四元数/移动参考框架业务,对于这样一个简单的问题,您应该需要这些业务。
推荐阅读
- sublimetext3 - 关闭 Sublime Text Emmet 包中的文本下划线
- python - 为什么我在使用 pygame 的 key.get_pressed 功能时不能在屏幕上输入文本?
- if-statement - 是否可以创建一个公式,根据查找列表检查行中的某些单元格并返回真/假值?
- sql - 基于日期列的列的返回值,取最接近 xx:00 和 xx:30 的值
- python-3.x - 如何在python中读取许多具有特定格式的文件
- javascript - 图像在悬停之前无法完全加载
- c++ - c++枚举类比较
- java - VPN 连接超时
- javascript - 使用 Javascript 查找 JSON 对象
- css - 如何在旁边设置一个带条的块引用样式(如 Stack Exchange)?