我有一艘宇宙飞船,按照这个剧本绕行星运行:
Update() {
transform.RotateAround(planet.transform.position, Vector3.up, speed * Time.deltaTime);
}但是我不明白如何在这个脚本中添加用户输入(Input.GetAxis(“水平”)和Input.GetAxis(“垂直”)),这样用户就可以控制飞船的移动。如何使用用户输入(箭头)在轨道上移动宇宙飞船?
编辑:摄像机从后面跟着船。飞船在行星轨道上被某种力(速度)向前移动(为了简化,它只是一个圆)。我希望用户能够改变移动方向(左\右),比如在pucture中(从D1到D2)。


发布于 2018-12-23 20:23:23
此任务可分为两部分。首先是基于用户输入的船舶旋转。第二,改变我们的轨道运行方式,使之考虑到飞船的旋转,使其朝着它所面对的方向移动。
我们可以通过使用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);(问题编辑的答案编辑)
https://stackoverflow.com/questions/53906838
复制相似问题