Search
Write a publication
Pull to refresh

Почему не Object.Instantiate?

А почему бы и нет.

Разберемся, что такой Object.Instantiate.

Обратимся к официальной документации Unity.

Эта функция создает клон объекта аналогично команде «Дублировать» в редакторе.

Instantiate(Object original);

Создание клона объекта крайне затратный по ресурсам. Измерения будут проводиться с помощью Stopwatch.

С использованием Instantiate:

void CubeInPosInstantiate()
{
			GameObject obj = Instantiate(Cube);
			obj.transform.position = new Vector3(1.25f, 0f, 0f);
}
Результат

Время выполнения блока кода 0.5647ms

И простым присвоением новой позиции:

void CubeInPosTransform()
{
			Cube.transform.position = new Vector3(1.25f, 0f, 0f);
}
Результат

Время выполнения блока кода 0.2324ms

Переместить готовый Куб очевидно будет быстрее чем создать новый и переместить его.

Вывод 1 теста

На данном примере видно, что разница составляет 0.3323ms. Просто переместить объект из точки А в точку Б быстрее в 2.43 раза, чем его создать там.

Рассмотрим более наглядный пример. Будем перемещать куб по оси Х и в последствии возвращать его обратно.

1

0,0843ms

2

0,0843ms

3

0,0849ms

4

0,0856ms

5

0,0862ms

6

0,0869ms

7

0,0875ms

8

0,0880ms

9

0,0885ms

10

0,0890ms

В среднем на выполнения уходит 0.08616ms. Попробуем сделать тоже самое, но удалять и создавать новый объект для каждого цикла перемещения. Для чистоты эксперимента создадим Prefab нашего Куба.

tempCube = Instantiate(Cube);

1

0,4222ms

2

0,7285ms

3

0,9460ms

4

1,0842ms

5

1,4340ms

6

1,6371ms

7

1,8521ms

8

2,1129ms

9

2,3629ms

10

2,6700ms

В среднем на выполнения уходит 1.3978ms. Что по сравнению с перемещением выглядит грустно. Естественно сложнее всего приходится при удалении объекта, бросить мы его там не можем. Посмотрим график.

Скорость выполнения кода для перемещения куба в 16.223 раза быстрее, чем для создания его клона. При измерении в 1 итерацию мы получили разницу в 2.43 раза, но на дистанции разница уже более очевидна.

ПС

Смысл данной статьи. Написать данную статью. Донести суть тем кто ее ищет.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.