2017-11-11 115 views
0

我使用這個代碼:加速度運動極限

void Update() 
{ 
    accel = Input.acceleration.x; 
    transform.Translate (0, 0, accel); 
    transform.position = new Vector3 (Mathf.Clamp (transform.position.x,-6.9f, 6.9f), -4.96f, 18.3f); 
} 

這讓我的遊戲對象移到我想要的方式,但問題是,當我把應用我的電話,(-6.9)(6.9)上不是我屏幕的「終點」。而我無法弄清楚如何根據每個屏幕尺寸更改這些值?

+1

使用'Screen.width'和'Screen.height'並儘量避免硬編碼變量。 –

+0

感謝您的回放。你能解釋如何使用screen.width和height嗎? –

+0

我會嘗試,但是我沒有足夠的信息來幫助您在上下文中使用它。你能發佈你想要實現的圖像嗎? –

回答

0

這將是一個較長的答案,所以請在這裏忍受我。

請注意,本文假設您使用正交相機 - 使用的公式不適用於透視相機。

據我所知,你的願望是保持你的對象在屏幕邊界內。 Unity中的屏幕邊界由相機尺寸和屏幕尺寸的組合決定。

float height = Camera.main.orthographicSize * 2; 

相機的正投影尺寸決定世界單位屏幕的尺寸的一半。乘以這個值將導致屏幕頂部和底部之間的世界單位數量。

要從此值獲得寬度,我們將該值乘以屏幕寬度除以屏幕高度。

float width = height * Screen.width/Screen.height; 

現在我們有我們屏幕的尺寸,但我們仍然需要保持對象在這些邊界內。

首先,我們創建一個Bounds類型的實例,我們將使用該實例確定該位置的最大值和最小值。我們使用Vector3.zero因爲我們的邊界實例的中心

Bounds bounds = new Bounds (Vector3.zero, new Vector3(width, height, 0)); 

注應該是世界的中心。這是你的物體應該能夠在裏面移動的區域的中心。

最後,根據我們得到的界限的屬性,我們限制對象的位置值。

Vector3 clampedPosition = transform.position; 
clampedPosition.x = Mathf.Clamp(clampedPosition.x, bounds.min.x, bounds.max.x); 
transform.position = clampedPosition; 

這應該確保您的對象永遠不會離開屏幕的邊界!

+0

所以感謝解釋,但現在統一給了我bounds.min.x和bounds.max.x的錯誤:'資產/腳本/控制器。cs(31,54):錯誤CS0103:當前上下文中不存在名稱'bounds' –

+0

@TodorValkov您必須將變量'bounds'保存在某個明顯的位置,可能位於控制器腳本中的私有變量中。 –

+0

哦,現在我不在。謝謝!!它正在工作。 –