繁体   English   中英

Unity 3D使用用户输入在轨道上移动对象

[英]Unity 3D move object around orbit with user inputs

我有一个宇宙飞船,它通过以下脚本绕行星轨道飞行:

Update() {
    transform.RotateAround(planet.transform.position, Vector3.up, speed * Time.deltaTime);
}

但是我不明白如何在此脚本中添加用户输入(Input.GetAxis(“ Horizo​​ntal”)和Input.GetAxis(“ Vertical”)),以便用户可以控制飞船的运动。 如何使用用户输入(箭头)在轨道上移动飞船?

编辑:卡梅尔从后面跟随船。 船在行星的轨道上以某种力(速度)向前移动(为简化起见,它只是一个圆)。 我希望用户能够像在钉子(从D1到D2)中那样改变运动方向(左\\右)。

例

太空飞船在行星轨道上

此任务可以分为两部分。 首先是根据用户输入旋转船。 第二个是改变我们的轨道运行方法,以考虑船舶的旋转,使其沿其面向的方向运动。

我们可以使用Transform.Rotate调用解决第一部分。 由于我们希望船的底部始终面对行星,因此我们希望沿着船的“上”轴旋转。 对于我们的输入轴,“水平”可能是最直观的。 它看起来像这样:

transform.Rotate(Vector3.forward, Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime);

对于第二部分,重要的是要认识到Transform.RotateAround使用世界空间,而不是局部空间。 通过使用船舶的局部空间,它将解释船舶的旋转,从而使船舶将沿其面向的方向移动,而不是沿独立的方向移动。 我们可以通过使用Transform.TransformDirection函数来实现。 它看起来像这样:

transform.RotateAround(planet.transform.position, transform.TransformDirection(Vector3.up), speed * Time.deltaTime);

将它们结合到更新功能中可以快速进行测试。


另外,如果我们希望船舶在不进行船舶任何局部旋转的情况下从一侧到另一侧进行扫射,则可以使用另一个Transform.RotateAround调用来实现,如下所示:

transform.RotateAround(planet.transform.position, transform.TransformDirection(Vector3.right), Input.GetAxis("Horizontal") * strafeSpeed * Time.deltaTime);

(答案编辑为问题编辑)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM