我有一个非常简单的案例:平面上有2个立方体,玩家可以通过鼠标输入移动立方体。
每个立方体都附有一个对撞机和刚体,以及一个反弹的高摩擦材料。
我想要达到的目标是:如果一个立方体要与另一个立方体接触,我想阻止两个立方体互相推挤或相互进入 - 我希望它们互相作为墙。< / p>
我得到的是:
我试过的是在拖动它时打开立方体的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; }
感谢任何帮助。感谢。
答案 0 :(得分:3)
您是否尝试过放置物理材料并调整设置(尤其是摩擦设置)? &#xA;如果你做了,但没有达到你想要的效果,你可以使用 MonoBehaviour .OnCollisionExit 检测对象何时不再联系,并设置速度为0 或锁定位置。如果你锁定了位置,你可能需要一个协程才能解锁它。&#xA;这个解决方案可能会导致以后出现奇怪的错误(例如,如果碰撞不稳定,你的物体只会失去一帧的接触)。如果可能的话,我更喜欢使用物理材料。
&#xA;答案 1 :(得分:0)
可能不是最佳解决方案,但可能会在碰撞进入后摧毁刚体组件,这样立方体就会变成静止物体,从而变成墙壁。不久之后你可以再次添加刚体。