统一性-防止物体在短距离碰撞时弹起SO FAR?

时间:2018-10-29 20:36:27

标签: c# unity3d physics collider

好吧,我正在尝试做的是按照程序制造一大堆物体。我所做的是将我的对象的一个​​副本在容器中清空(带有脚本),然后将所有这些对象添加到列表中,同时随机克隆每个对象。

每个对象都有一个具有重力的Box碰撞器和Rigidbody。我需要两者,以使物体落在其他物体的顶部,但不能穿过地板。

我将每个对象克隆并定位在球体内的随机位置:

foreach(Transform t in transform)
        {


            if (t.name != "PileSphere")
            {
                for (int i = 0; i < Random.Range(minOfEach, maxOfEach); i++)
                {
                    GameObject g = Instantiate(t.gameObject);
                    spawnObjs.Add(g);
                }
                spawnObjs.Add(t.gameObject);
            }
            else
            {
                sphere = t.gameObject;
            }
        }

        foreach(GameObject g in spawnObjs)
        {

            Vector3 radius = Random.insideUnitSphere * 10 +transform.position;
            //g.transform.position = new Vector3(Random.Range(-10, 10), 0, Random.Range(-10, 10));
            g.transform.position = radius;
        }

这有效,但是我按play键,但没有任何对象保留在我实例化它们的空间中,因为尽管将反弹阈值设置得很高,它们仍会相互反弹许多米:

enter image description here

如何创建可移动的对象随机堆?

1 个答案:

答案 0 :(得分:0)

如果要在彼此的碰撞器中实例化它们,则物理引擎将添加几乎爆炸性的向外力,因为它会在它们接触的每个帧中增加速度。确保在生成时没有对碰器碰触。您不能在同一位置生成它们。您可以将它们排列成一堆,然后将整个堆预制成一个实例并将其实例化,也可以将它们实例化为不同的高度,然后让它们彼此落地。

如果使用预制件,则可以取消父对象分离,以免它们粘在一起。