2017-03-17 128 views
0

我有一個關於Unity的項目,我有一個2D空間世界,玩家(飛船)受到周圍行星的引力影響。但是我使用牛頓定律來計算引力(F = G *((M * m)/ r^2)),問題在於引力在整個水平上都是活躍的。Unity | CircleCollider2D.radius返回相同的值

因此,我使用影響範圍來限制重力會停止影響太空船的位置,並且要做到這一點,需要我擁有行星的半徑。

問題是,我的行星並不都具有相同的尺寸(或「比例尺」),但是預製件可以。因此CircleCollider組件的半徑爲1.5,指的是原始比例。無論規模如何,它都保持不變,即使我手動重新調整比例,對撞機在場景視圖中變得更大,但值相同。

所以我們假設我的行星1的尺度是(20,20,20),行星2的尺度是(10,10,10)。它們有不同的比例尺,但它們的CircleCollider值爲1.5,即使它在場景視圖中顯然是兩倍。

我到處尋找,我還沒有找到一種方法來調整CircleCollider.radius值到星球的比例尺。 我不一定需要獲得CircleCollider半徑,而只需要獲得Planet半徑。

回答

2

因此,據我瞭解,碰撞器在視覺上是正確的大小,所以他們會正常工作,但你試圖獲得它的價值,它返回某種本地價值。所以只需按比例乘以!

Vector3 scl = gameObject.transform.scale(); 
float colliderRadius = radius*scl; 

注意:我沒有打開Unity,所以它更像是僞代碼。

+0

而當你的遊戲將準備好,我想玩它。另外,如果你想在開發中獲得更多幫助,我可以使用一些我的時間=) – maximelian1986

+0

在一個更加統一(ish)的語法中,我應該是:werting: 'Vector3 scl = Planet.transform.localScale(); float colliderRadius = radius * scl;' 但問題是'Transform'沒有'localScale'的定義 –

+0

localScale的正確語法是:'transform.localScale + = new Vector3(0.1F,0 ,0);'。我很樂意發佈鏈接到遊戲;) –