Создание новых объектов в методе Update()



Я где-то читал, что я не должен создавать новый экземпляр объекта в методе Update() игрового движка, потому что это приведет к пробуждению сборщика мусора и снижению производительности, но иногда я вижу в некоторых учебниках, что они используют новое ключевое слово в методе unity Update ()! Это нормально? И Юнити как-нибудь справится с этим, или нет?

534   1  

1 ответ:

Это сбивает с толку новых программистов на C#.

Это нормально?

Ответ на этот вопрос зависит от типа данных, в котором используется ключевое слово new. Это в основном тип значения vs тип ссылки. Смотрите ссылку в конце этого ответа для получения дополнительной информации об этом.
  • Если это class, то не используйте ключевое слово new на нем в Функция Update. Используйте объединение объектов, или вы будете создавать новый объект каждый раз. рамка. Да, это дорого стоит.
  • Если это struct, Вы можете свободно использовать ключевое слово new на нем в функция Update без.

Возможно, вы видели такой код в функции Update:

Vector3 vec = new Vector3(0, 0, 0);

Это прекрасно, потому что единство Vector3 является struct не class.

Введите описание изображения здесь


Другой пример-это функция Update:

GameObject obj = new GameObject("MyObject");

Это плохо, потому что GameObject является class. Вы создаете Объект каждый кадр. Сделайте это один раз в функции Start, а затем повторно используйте ее. Вы также можете использовать объединение объектов.

Введите описание изображения здесь

Обратите внимание на обведенный красным цветом текст, вы можете использовать его, чтобы определить, является ли используемый API class или struct.

Вот еще что нужно знать:

1.c# value type vs reference type

2.есть ли смысл в рециркуляции типов ценностей unity

3.в чем разница между структура и класс в .NET?

4.объединение объектов в единое целое


Обратите внимание, что этот ответ фокусируется на использовании ключевого слова newв Unity, как указано в вашем вопросе. Есть еще другие вещи, которые могут выделять память даже без использования ключевого слова new. Примеры включают использование ключевого слова param в параметре функции, возврат массива в функции, использование yield return 0 вместо того, чтобы yield return null.

И unity каким-то образом справится с этим, или нет?

Единственный, кто может ответить на этот вопрос, - этоустройство, на котором вы запускаете этот код . Обычно вы получаете некоторые икоты на мобильных устройствах из-за запуска GC. Объединение объектов очень важно на мобильных устройствах.

Comments

    Ничего не найдено.