2016-09-30 42 views
0

我有兩個球體GameObjects作爲預製件。他們附有剛體。我希望他們留在表面上,但是當他們相互碰撞時互相交流(互相推擠,互相反彈,等等)。但是,在遊戲視圖中,當我在預製中拖動,並且剛體「使用重力」複選框關閉時,物體就會浮起來!我不想要這個,所以我打開了「使用引力」。現在,他們被置於場景中,但仍然需要很長時間才能落到地板上,當我拖動他們時,他們仍然可以在那裏漂浮。我該如何讓他們留在表面上,但彼此互動?GameObject Prefabs floating away

我試圖做這樣的事情

(Get-the-GameObject).GetComponent<Rigidbody>().velocity = Vector3.zero; 

但是,這並不做任何事情。

在圖片中,您可以看到我已將球體放置在地板上,但它已飄浮而去!在物理編輯器中,重力被設置爲-9.81的Y分量。

編輯:我已將球體的比例縮小到5左右,它會落到地板上並開始向左滑動。地板是不以任何方式讓我很奇怪,爲什麼現在是左右滑動傾斜...

編輯:

球由點擊與你想要的顏色框,拖動它的實例桌面空間和釋放。一旦釋放,當它開始浮動/滑動。這是執行該操作的代碼。

void OnMouseDown() 
{ 
    clone = (GameObject)Instantiate(prefab_to_instatiate, hit.point, Quaternion.identity); 
} 

void OnMouseDrag() 
{ 
    // Code to make an atom follow the mouse cursor 
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 

    RaycastHit hit2; 
    if(Physics.Raycast(ray, out hit2, Camera.main.farClipPlane)) 
    { 
     float oldY = transform.position.y; 
     clone.transform.position = new Vector3(hit2.point.x, oldY, hit2.point.z); 
    } 
} 

enter image description here

編輯2:描述發生了什麼事,最好的辦法是,如果我提供的視頻。這裏的鏈接:https://vimeo.com/185419058

我點擊一個帶有原子的盒子,按住鼠標按鈕將其拖入桌面區域並釋放以放下它。但是,當我拖動時,即使我的鼠標靜止不動,視頻也會顯示原子像瘋了一樣彈跳。然後,當我釋放時,它開始滑動。我只是想點擊,拖動,並將其放置在一個位置,而不會產生所有這些瘋狂的效果。如果我刪除所有預製原子上的剛體,這就是我想要的。然而,我希望能夠使用剛體,因爲我希望原子在彼此接近時互相作用。

+0

對象相對於世界尺度的規模是多少?如果它們是巨型的,那麼任何重力效應都會顯得有點「浮動」。 – Serlite

+0

我的球體的比例尺範圍從40-50 – noblerare

+0

是否有任何其他腳本來控制球體的移動?我們能否看到球體的場景層次/屬性? – Serlite

回答

2

因爲您試圖控制物理引擎控制下的對象。就像帝國有兩個國王一樣,顯然會有戰爭或衝突。讓我們更進一步,物理引擎每更新FixedUpdate(),默認設置爲0.02s,並且每一幀都執行OnMouseDrag()。

當鼠標關閉時,OnMouseDrag被調用每一幀。

https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDrag.html

在你OnMouseDrag()您是通過transform.position設置的位置,它是一種非物理方法。我建議你試試Rigidbody.MovePosition()Rigidbody.position。我還沒有嘗試過,我經常喜歡寫我自己的物理模擬,因爲Unity是堅果。

https://docs.unity3d.com/ScriptReference/Rigidbody-position.html

https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html

如果沒有解決你的問題,你可以嘗試關閉rigidbodyrigidbody.enabled = false,而OnMouseDrag()生效,以避免衝突,當你鬆開鼠標,打開它將控制返回到物理引擎。

+0

使用'Rigidbody.MovePosition'沒有爲我工作,但你的建議關掉'rigidbody'並重新啓用它完全使用正則' transform.position'移動工作!注意:禁用'rigidbody'需要將'isKinematic'設置爲true,反之亦然。現在一切正常!我可以點擊來實例化一個新的原子,將它拖到適當的地方,釋放它,它很好地落下並保持在那裏。完美的答案給我。 – noblerare

+0

是的,我忘記了在移動物體時禁用剛體的事情會導致系統嚴重過熱,因爲它假定沒有剛體的對撞機是靜態對撞機(不會移動)。 Toggling isKinematic更好:D –

+0

@noblerare所以這些都是原子!太好了!讓我知道你何時發佈標題;) – 2016-10-04 06:26:22