Unity - не дать объектам отскочить от ударов при столкновении на коротком расстоянии? - PullRequest
0 голосов
/ 29 октября 2018

Хорошо, я пытаюсь сделать огромную кучу объектов, процедурно. Я сделал 1 копию моего объекта в контейнере пустым (со сценарием), затем добавил все эти объекты в список, клонируя каждый случайное число раз.

Каждый объект имеет боксовый коллайдер и твердое тело с гравитацией. Мне нужно и то и другое, чтобы объект падал поверх других, а не на пол.

Я клонирую и размещаю каждый объект в произвольной позиции в сфере:

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 Ответ

0 голосов
/ 29 октября 2018

Если вы создаете их экземпляры внутри коллайдеров друг друга, физический движок добавит почти взрывную внешнюю силу, потому что он добавляет скорость каждому кадру, с которым они контактируют. Убедитесь, что ни один из ваших коллайдеров не соприкасается при порождении. Вы не можете породить их всех в одном месте. Вы можете упорядочить их в кучу и сделать всю эту кучу сборным и создать ее экземпляр, или вы можете создать экземпляр на разных высотах и ​​позволить им приземляться друг на друга.

Если вы используете префаб, вы можете очистить отдельные объекты, чтобы они не слипались.

...