代码之家  ›  专栏  ›  技术社区  ›  blue

统一-防止物体在短距离碰撞时反弹过远?

  •  1
  • blue  · 技术社区  · 6 年前

    好吧,我想做的是按程序做一大堆东西。我所做的是让容器中的一个对象副本为空(使用脚本),然后将所有这些对象添加到一个列表中,同时随机克隆每个对象。

    每个物体都有一个长方体对撞机和具有重力的刚体。我两者都需要,这样物体就落在其他物体的上面,而不是穿过地板。

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

    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;
            }
    

    enter image description here

    1 回复  |  直到 5 年前
        1
  •  0
  •   Eliasar    6 年前

    如果你在彼此的对撞机中实例化它们,物理引擎会增加一个几乎爆炸性的向外力,因为它会增加它们接触的每一帧的速度。确保在生成时,碰撞器没有接触。你不能在同一个地方繁殖它们。你可以把它们排列成一堆,把整个堆做成一个预制件,然后实例化,或者你可以在不同的高度实例化它们,让它们彼此落地。

    如果使用预置,则可以断开单独对象的连接,这样它们就不会粘在一起。