2015-08-27 71 views
0

我仍然是新手Unity!我試圖開發簡單的迷宮遊戲。我想通過迷宮滾動我的球,但我必須向左或向右旋轉相機,否則球員在左側或右側滾動球時看不到後面的情況。迷宮遊戲中的相機旋轉取決於加速度計

void Start() 
{ 
    offset = transform.position - player.transform.position; 
} 

void LateUpdate() 
{ 
    transform.position = player.transform.position + offset; 
} 

我使用低通濾波器,用於加速計值:

Vector3 lowpass() 
{ 
    float LowPassFilterFactor = AccelerometerUpdateInterval/LowPassKernelWidthInSeconds; 
    lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor); 
    return lowPassValue; 
} 

加速度的值從-1到1的每個座標。正因爲如此,我檢查了我的lowPassValue.x值並限制它。如果是正值(> 0.3),那麼相機應該向右轉,如果是負值(< -0.3),則相機應該向左轉。

Quaternion rotation = Quaternion.AngleAxis(45, Vector3.up* Time.deltaTime) ; // right 
transform.rotation = rotation; 

Quaternion rotation = Quaternion.AngleAxis(-45, Vector3.up * Time.deltaTime) ; // left 
transform.rotation = rotation; 

但是後來我的偏移量不再工作了,我再也看不到球了。並且相機旋轉不起作用。 有沒有更好的解決方案,或者我使用了錯誤的功能?

任何幫助將不勝感激!

回答

0

您的AngleAxis()出現問題,您將Axis乘上Time.deltaTime。這意味着基本上你正在改變旋轉軸,而且這是不可預測的。很可能你不會得到你的「正確」或「左轉」輪換。相反,由angle本身乘以deltaTime。 此外,Quaternion s爲相乘,如果你想申請與他們的角度:

Quaternion rotation = Quaternion.AngleAxis(45 * Time.deltaTime, Vector3.up) ; // right 
transform.rotation *= rotation; 

Quaternion rotation = Quaternion.AngleAxis(-45 * Time.deltaTime, Vector3.up) ; // left 
transform.rotation *= rotation; 

或這可能僅僅是實現爲:

transform.Rotate(45 * Vector3.right * Time.deltaTime); // right 

transform.Rotate(45 * -Vector3.right * Time.deltaTime); // left 
+0

我想你的解決方案,但如果我翹起我android設備左/右數秒,相機旋轉360°。我需要最大90°左和90°右... – Moonbeam

+0

我在想,如果有可能在Unity中旋轉整個場景視圖?也許這應該工作... – Moonbeam