好吧,我正在尝试做的是按照程序制造一大堆物体。我所做的是将我的对象的一个副本在容器中清空(带有脚本),然后将所有这些对象添加到列表中,同时随机克隆每个对象。
每个对象都有一个具有重力的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键,但没有任何对象保留在我实例化它们的空间中,因为尽管将反弹阈值设置得很高,它们仍会相互反弹许多米:
如何创建可移动的对象随机堆?
答案 0 :(得分:0)
如果要在彼此的碰撞器中实例化它们,则物理引擎将添加几乎爆炸性的向外力,因为它会在它们接触的每个帧中增加速度。确保在生成时没有对碰器碰触。您不能在同一位置生成它们。您可以将它们排列成一堆,然后将整个堆预制成一个实例并将其实例化,也可以将它们实例化为不同的高度,然后让它们彼此落地。
如果使用预制件,则可以取消父对象分离,以免它们粘在一起。