我有一個非常簡單的例子:在一個平面上有2個立方體,玩家可以通過鼠標輸入移動一個立方體。停止剛體碰撞後移動
每個立方體都有一個對撞機和剛體連接,以及一個0次反彈的高摩擦材料。
我想要實現的是:如果一個立方體要與另一個立方體接觸,我想阻止這兩個立方體互相推擠或互相碰撞 - 我希望他們互相起到隔牆的作用。
什麼我得到是這樣的:
我曾嘗試是對多維數據集的IsKinematic選項開關,同時我拖累他們,但是這導致了沒有結果。
這裏是我的代碼:
private Vector3 screenPoint; private Vector3 offset; private Vector3 oldPosition; private Rigidbody rBody; private bool dragging = false; void Awake() { rBody = gameObject.GetComponent<Rigidbody>(); } void OnMouseUp() { dragging = false; rBody.isKinematic = false; } void FixedUpdate() { if(dragging) { Vector3 cursorPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); Vector3 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset; cursorPosition.y = oldPosition.y; rBody.MovePosition(cursorPosition); } } void OnMouseDown() { screenPoint = Camera.main.WorldToScreenPoint(rBody.position); offset = rBody.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); oldPosition = rBody.position; } void OnMouseDrag() { dragging = true; rBody.isKinematic = true; }
任何幫助表示讚賞。謝謝。
你試過鎖定剛體上的位置嗎?您可以在檢查員中執行此操作:) – Tom
感謝您的輸入,@Tom。是的,我曾嘗試加入X和Z在檢查的剛體凍結位置的限制,但這樣做,我的鼠標移動的立方體腳本將不以任何形式使用。 :( – ExplodingTiger
@JoeBlow - 對不起不夠明確,我會試着更好地解釋:用戶開始拖動白色立方體用鼠標白色立方體紅色立方體碰撞紅色立方體保持靜止用戶繼續拖動白色立方體。。。用戶仍然拖動白色立方體,其可沿平面的表面上移動,但不能在紅色立方體的方向(因爲紅色立方體是應該直接接地)。用戶停止拖動。相同的行爲預期如果用戶開始拖動紅色立方體。 – ExplodingTiger