2016-03-31 46 views
0

我正在玩Google Cardboard。我坐在駕駛艙內,可以毫無問題地環顧四周。從一邊到另一邊傾斜遊戲對象

現在我想傾斜我的駕駛艙從一邊到另一邊給予更真實的感覺,而不是隻是靜止。

到目前爲止,我有這樣的:

using UnityEngine; 
using System.Collections; 

public class Tilt : MonoBehaviour 
{ 
    float speed = 0.25f; 

    void Update() 
    { 
     Tilter(); 
    } 

    void Tilter() 
    { 
     if (transform.rotation.z < 5f) { 
      transform.Rotate (new Vector3 (0f, 0f, speed)); 
     } 

     if (transform.rotation.z > 5f) 
      transform.Rotate (new Vector3 (0f, 0f, -speed)); 
    } 

} 

這將啓動傾斜座艙向左如預期,但一旦旋轉變得比5的值越大,駕駛艙不旋轉的其他方式,以相同的方式保持旋轉,而不是相反的方向。

+0

你的代碼中存在的一個邏輯問題是,即使它完美地工作,你的旋轉將最終鎖定在z = 5。當它通過5時,它會回到5 ...,當它稍微低於它時,它將回到5以上。這將在5無窮大附近振盪,基本上是振動(幅度取決於「速度」 )。這是你的意圖嗎? – Serlite

+0

@Tom,這是一個很好的問題。你爲什麼要刪除它?問題解決了嗎? – Programmer

+0

@程序員在我意識到我在檢查員中分配了錯誤的東西之前,輸入了約15分鐘的時間 - 只是一個愚蠢的錯誤!你認爲我應該離開它,只是把我的尷尬的答案? :') – Tom

回答

2

我還沒有試過這段代碼,但是如果我理解你正在嘗試做什麼,我會建議使用Mathf.Sin和Time.time來連續獲取-1到1的值,然後乘以駕駛艙的旋轉範圍。例如:

using UnityEngine; 
using System.Collections; 

public class Tilt : MonoBehaviour 
{ 
    float speed = 1.0f; 
    float rotationAngle = 45; 

    void Update() 
    { 
     Tilter(); 
    } 

    void Tilter() 
    { 
     float rotationZ = rotationAngle * Mathf.Sin(Time.time * speed); 
     transform.Rotate (new Vector3 (0f, 0f, rotationZ)); 
    } 

} 

這個例子應該將駕駛艙慢慢旋轉從0到45,然後再返回到0,再到-45,然後再返回到0,在等(我又還沒有嘗試過)。

您可以增加或減少速度值以使旋轉速度更快或更慢。

相關問題