【问题标题】:Unity - prevent objects from bouncing SO FAR off when colliding at short distance?Unity - 防止物体在短距离碰撞时反弹这么远?
【发布时间】:2018-10-29 20:36:26
【问题描述】:

好的,我想做的是按程序制作一大堆对象。我所做的是将容器中的对象的 1 个副本为空(带有脚本),然后将所有这些对象添加到列表中,同时随机克隆每个对象的次数。

每个对象都有一个 Box collider 和带有重力的 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;
        }

这行得通,但是我按下播放键,并且没有任何对象保留在我实例化它们的空间中,因为尽管将反弹阈值设置得很高,但它们彼此反弹了很多米:

我可以做些什么来随机创建一堆可移动的对象?

【问题讨论】:

  • 如果您移除 RigidBody,它们将不会反弹。那么你为什么不想办法让它们在不使用刚体和重力的情况下下落呢?

标签: c# unity3d physics collider


【解决方案1】:

如果您在彼此的碰撞器中实例化它们,物理引擎将添加一个几乎爆炸性的向外力,因为它会在它们接触的每一帧中增加速度。确保在生成时没有任何对撞机发生接触。您不能将它们全部生成在同一个位置。您可以将它们排列成一堆,将整个堆做成预制件并实例化它,或者您可以在不同的高度实例化它们,然后让它们彼此着陆。

如果您使用预制件,则可以取消单独的对象的父级,这样它们就不会粘在一起。

【讨论】:

  • 好的,有什么办法,当我定位它们以进一步减少反弹功率/影响?
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 2013-12-24
  • 1970-01-01
相关资源
最近更新 更多