首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用用户输入在轨道周围统一三维移动物体

用用户输入在轨道周围统一三维移动物体
EN

Stack Overflow用户
提问于 2018-12-23 20:11:23
回答 1查看 1.9K关注 0票数 0

我有一艘宇宙飞船,按照这个剧本绕行星运行:

代码语言:javascript
复制
Update() {
    transform.RotateAround(planet.transform.position, Vector3.up, speed * Time.deltaTime);
}

但是我不明白如何在这个脚本中添加用户输入(Input.GetAxis(“水平”)和Input.GetAxis(“垂直”)),这样用户就可以控制飞船的移动。如何使用用户输入(箭头)在轨道上移动宇宙飞船?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-23 20:23:23

此任务可分为两部分。首先是基于用户输入的船舶旋转。第二,改变我们的轨道运行方式,使之考虑到飞船的旋转,使其朝着它所面对的方向移动。

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

代码语言:javascript
复制
transform.Rotate(Vector3.forward, Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime);

对于第二部分,重要的是要认识到,Transform.RotateAround使用的是世界空间,而不是本地空间。通过使用船舶的局部空间,它将考虑船舶的旋转,从而使船舶朝着它所面对的方向移动,而不是朝着一个独立的方向移动。我们可以通过使用Transform.TransformDirection函数来实现这一点。看起来会是这样的:

代码语言:javascript
复制
transform.RotateAround(planet.transform.position, transform.TransformDirection(Vector3.up), speed * Time.deltaTime);

在一个快速测试中,将这些组合在一个更新功能中对我来说是有效的。

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

代码语言:javascript
复制
transform.RotateAround(planet.transform.position, transform.TransformDirection(Vector3.right), Input.GetAxis("Horizontal") * strafeSpeed * Time.deltaTime);

(问题编辑的答案编辑)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53906838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档