首页 > 解决方案 > 如何停止自己飞起来的物体?

问题描述

我有一堆立方体,当与特定物体碰撞时,2 个小立方体会破裂。打破立方体后应该在侧面滑动,但是当我将堆栈与我的对象碰撞时它们会自行飞起来。我可以以任何简单的方式阻止它并允许小立方体仅在 X 轴的侧面(左右)上滑动吗?

Vector3 pos = new Vector3(_pos.x, victim.position.y, victim.position.z);
Vector3 victimScale = victim.localScale;
float distance = Vector3.Distance(victim.position, pos);
if (distance >= victimScale.x/2) return false;

Vector3 leftPoint = victim.position - Vector3.right * victimScale.x/2;
Vector3 rightPoint = victim.position + Vector3.right * victimScale.x/2;
Material mat = victim.GetComponent<MeshRenderer>().material;
Destroy(victim.gameObject);

GameObject rightSideObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
rightSideObj.transform.position = (rightPoint + pos) /2;
float rightWidth = Vector3.Distance(pos,rightPoint);
rightSideObj.transform.localScale = new Vector3( rightWidth ,victimScale.y ,victimScale.z );
rightSideObj.AddComponent<Rigidbody>();
rightSideObj.GetComponent<MeshRenderer>().material = mat;

GameObject leftSideObj = GameObject.CreatePrimitive(PrimitiveType.Cube);
leftSideObj.transform.position = (leftPoint + pos)/2;
float leftWidth = Vector3.Distance(pos,leftPoint);
leftSideObj.transform.localScale = new Vector3( leftWidth ,victimScale.y ,victimScale.z );
leftSideObj.AddComponent<Rigidbody>();
leftSideObj.GetComponent<MeshRenderer>().material = mat;

我正在使用一个代码将大立方体分解为 2 个小立方体。为了在侧面滑动 leftsideobj 和 rightsideobj,我使用了 AddForce。

标签: c#unity3d

解决方案


首先,是刹车,不是刹车。

您可以对碎片施加约束以禁止沿 y 或 z 轴运动。


推荐阅读