我有一个非常简单的例子:在一个平面上有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