【问题标题】:Unity 3D move object around orbit with user inputsUnity 3D 使用用户输入围绕轨道移动物体
【发布时间】:2018-12-23 20:11:23
【问题描述】:

我有一艘宇宙飞船,它按照这个脚本绕着行星轨道飞行:

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

但我不明白如何将用户输入(Input.GetAxis("Horizo​​ntal") 和 Input.GetAxis("Vertical"))添加到此脚本,以便用户可以控制飞船的运动。如何使用用户输入(箭头)围绕轨道移动宇宙飞船?

编辑: Camer 从后面跟随着船。船在行星轨道上通过某种力(速度)向前移动(为了简化,它只是一个圆圈)。我希望用户能够改变移动方向(左\右),就像在 pucture 中一样(从 D1 到 D2)。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    这个任务可以分成两部分。首先是根据用户输入旋转船。第二个是改变我们的轨道方法来考虑飞船的旋转,使它朝着它所面对的方向移动。

    我们可以通过调用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);
    

    (为问题编辑编辑答案)

    【讨论】:

    • 谢谢!但是通过改变速度组件,用户只能向前和向后移动船。但我也想通过用户输入来改变移动的方向\角度。
    • 抱歉,从您上面的描述中看不清楚。所以你想让飞船靠自己的力量移动,以及保持它在轨道上的独立引力吗?要使飞船向前移动,您需要transform.Translate(Input.GetAxis("Vertical") * Vector3.forward * moveSpeed * Time.deltaTime); 之类的东西,而要旋转它,除了当前的轨道代码之外,您还需要transform.Rotate(Input.GetAxis("Horizontal") * Vector3.right * rotationSpeed * Time.deltaTime); 之类的东西。如果您更新您的描述,我会相应地更新我的答案。
    • 当然,像这样手动移动飞船会改变轨道的形状。如果您追求的是准确的模拟,您可能需要考虑比 RotateAround 更先进的东西,它可以让您模拟任何形状的轨道。
    • 澄清问题
    • 感谢您的澄清。我修改了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多