我有一個非常簡單的模型,可以在x和y方向上移動,而海洋滾動讓飛機看起來像飛機飛行。每當飛機移動時,我都會調整它的俯仰和俯仰。Unity v。4:旋轉導致跳躍
我計算並保持對象腳本內的位置,滾動和俯仰。每一個更新步驟我都將它們重新分配給對象的Unity屬性。
問題來了,我試圖添加桶滾動效果。此代碼工作正常:
transform.Translate(position - transform.position);
Vector3 rotChange = new Vector3 (-pitch, 0, -roll) -
transform.rotation.eulerAngles;
transform.Rotate (rotChange);
只要我保持在+ - 30度內的所有旋轉。當飛機正在做桶滾,它更新與下面的每一步:
velocity = new Vector3 (barrelRollDirections.x * barrelRollXSpeed,
barrelRollDirections.y * barrelRollYSpeed, 0);
roll += barrelRollTurnSpeed * Time.deltaTime;
if (roll < -(fullRotation/2)) {
roll += fullRotation;
}
if (roll > (fullRotation/2)) {
roll -= fullRotation;
}
有趣的是,圍繞旋轉的飛機實際工作正常,如果飛機沒有沿x或y軸移動時我這樣做。但如果是這樣的話,它會跳到所有地方,並且只有在滾動結束後纔會重新出現在適當的最終位置。
我嘗試了許多方法來解決這個問題:
- 轉換我期望的方向使用Quaternion.Euler和分配直接到transform.rotate四元數。這並沒有解決任何問題,也導致飛機在運動範圍內抖動和抖動。
- 將平面的初始方向保存在四元數中,然後每更新一次,將初始旋轉重新分配給平面,然後調用Transform.Rotate(new Vector3(-pitch,0,-roll))。我認爲這會解決我的問題,如果它是像萬向節鎖那樣的話,那麼我就會每走一步,就應用小於180度的旋轉。但沒有骰子。
(很抱歉的隨機回覆要關閉請原諒!) 按[文檔](https://docs.unity3d.com/ScriptReference/Transform.Translate.html): '公共無效翻譯(Vector3 translation,Space relativeTo = Space.Self);' 所以如果你沒有指定'Space.World',它會假設你正在嘗試在本地空間進行翻譯。 – Guest 2017-12-07 00:02:05