簡體   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