Чи споживають об’єкти гри, які лежать поза зоною камери, комп’ютерні / мобільні ресурси в Unity?


11

Припустимо, припустимо, що у мене на сцені є деякі ігрові об’єкти, які не видно камері, і тому вони не відображаються під час гри.

Чи споживають ці ігрові об’єкти комп’ютерні / мобільні ресурси під час гри?

Де я можу знайти деталі щодо подібного використання?

Відповіді:


13

Те, що ви хочете, - це профайл пам'яті, який має Unity. Тут: http://docs.unity3d.com/Manual/ProfilerMemory.html

Але ваше припущення здебільшого вірно, якщо gameObject не видно камері, він не намальований, і він використовує менше ресурсів, але все-таки повинен споживати деякі. GameObject все ще існує в пам'яті, включаючи всі текстури, сценарії моделей і т. Д. Він також забирає час процесора за допомогою методів Update і FixedUpdate (та інших інших, описаних тут ).

Але зазвичай основним уповільненням є малювання, невелика кількість часу процесора використовується для визначення того, що об'єкт знаходиться поза межами камери (рамки), але малювання не робиться.


5

Я думаю, ви також повинні знати про відсікання фруктових фруктів або приховане видалення поверхні: http://en.wikipedia.org/wiki/Hidden_surface_deterication

Це важливий біт оптимізації гри, тому що навіть якщо ваші об'єкти не знаходяться всередині фрустру в заданому кадрі (тобто видно), деякі дзвінки (шейдери) для малювання все ще запускаються для них, отже знижуючи продуктивність.


2
@ Gissipi_453, в той час як дослідження за цими напрямками, а також дослідження четирёх'- і восьмеричні дерева (сортування просторових даних)
Jon

3

Коротка відповідь - «так»; все, що готово використовувати у вашій грі - це зайняти пам'ять.

Інша річ, яку слід врахувати, - це вартість вашої частоти кадрів:

5 об'єктів із 5 окремими текстурами, намальованими окремо, потребують змін стану між ними. Можливо, ви зможете зберегти деяку пам'ять, завантаживши текстури, які не використовуються.

Завантажуючи всі окремі текстури в одну атласну текстуру, слід пам’яті фіксується, і ви більше не можете вивантажувати окрему текстуру. Після створення вам потрібно лише один раз зв’язати атлас, щоб намалювати всі свої об’єкти.

Інший приклад - простий вершинний та індексний буфер. Якщо багато точок часто перемикаються між видимими і ні, швидше залишити "несвіжі" точки у вершинному буфері і завантажувати лише новий індексний буфер.

Є багато інших випадків, коли збільшена вартість передньої пам’яті є кращою перед багатьма змінами стану.

Якщо ви обертаєте камеру, ви точно не знищите цих об'єктів, якщо не знаєте, що камера не повернеться назад, щоб перевірити цей об'єкт. "- Кату

Використовуючи бічний скроллер як приклад, якщо ви можете рухатись лише вправо (карта прокручується лише вліво), будь-який об’єкт, який прокручується з лівої частини екрана, може бути назавжди вивантажений, оскільки ви його більше ніколи не будете використовувати. Крім того, вміст для об'єктів може бути завантажений безпосередньо перед тим, як об’єкт прокручується в поле з виду праворуч.


1

Дуже багато відповідей в основному враховують графічний аспект вашого питання.

Справа в тому, що вони займуть різні ресурси, і наскільки вони дорогі в порівнянні з малюванням об'єкта, не встановлено. Це не так рідко, як деякі відповіді, що передбачають, що ваші компоненти роблять дорожчі операції, ніж малювання, але ви можете мінімізувати, скільки ресурсів вони використовують. Також пам’ятайте, що GameObject займає невелику кількість пам’яті, і так це роблять її компоненти. Компоненти можуть також робити речі, які займають досить небагато пам'яті.

Найпростішим способом мінімізації ефекту позаекранних компонентів є система, заснована на зворотних викликах OnBecameVisible і OnBecameInvisible .

void OnBecameVisible()
{
    myComplexComponent.enabled = true;
}
void OnBecameInvisble()
{
    myComplexComponent.enabled = false;
}

Звичайно, це дуже обмежена корисність, оскільки є багато випадків, коли ви хочете, щоб зовнішній екран впливав на гру. Але ви можете розширити цю схему для тонкозернистої системи, здатної мінімізувати ефект ваших найдорожчих розрахунків. Навіть щось таке просте, як зменшення чогось, наприклад, якості сценарію, що слідує за сценарієм, коли об'єкт поза екраном, може призвести до великих заощаджень у довгостроковій перспективі.


1

Потрібна пам'ять, щоб зберегти його живим і оновити своє положення та інші властивості.

Але він не споживає комп'ютерні / мобільні графічні ресурси, оскільки його не видно.

Так, так, він використовує ресурси пам'яті, але не графічні ресурси, як видимий ігровий об'єкт.


Дуже дякую. Це дуже пряма відповідь, яку я шукав.
Gissipi_453

0

Все, що є в програмі, споживає ресурси; Ви не думаєте, що програми працюють просто надіями та мріями, чи не так?

Питання має полягати в тому, скільки ресурсів споживає ігровий об’єкт, і для цього я думаю, що це досить солідна відповідь: http://answers.unity3d.com/questions/280455/how-much-memory-a-gameobject- consume.html

Словом, вони споживають незначні ресурси самостійно. Але чому ви хочете, щоб купа ігрових предметів просто сиділа у вашій грі, нічого не роблячи? Зрештою, те, що ви фактично змушуєте ці ігрові об’єкти «робити», - це те, що викличе будь-які накладні витрати, і скільки необхідних ресурсів, це дуже багато у кожному конкретному випадку.


Велике спасибі. Тож чи варто знищувати предмети, які вийшли з поля зору камери під час гри?
Gissipi_453

1
Я думаю, що ця відповідь насправді взагалі не намагається відповісти на ваше запитання, і, отже, просто неправильно. Якщо ви обертаєте камеру, ви точно не знищите ці об'єкти, якщо не знаєте, що камера не повернеться назад, щоб перевірити цей об'єкт. Ігрові світи існують і рух AI, світло впливає на навколишнє середовище, навіть якщо ви цього не бачите.
Кату

@Katu, це теж момент. Дякую. Якщо об'єкт взагалі не потрібен, він не повинен його знищувати.
Gissipi_453

@Katu Я відповів на питання: "Чи будуть ці ігрові об'єкти (об'єкти в моїй сцені, які не видно камері) споживають комп'ютерні / мобільні ресурси, коли гра працює?" Відповідь така: "Так. Все, що є в програмі, витрачає ресурси". І я продовжував пояснювати вплив порожніх ігрових об’єктів на сцену та витрати на ресурси.
повернення справжнього

2
@ Gissipi_453 Щоб відповісти на ваше запитання, це повністю залежить від того, що насправді роблять об’єкти гри на сцені, як часто вони створюються / видаляються та інші міркування. Знати, коли оптимізувати, - це навичка, яка залежить від самого себе, але головне правило - не турбуватися про це, поки не буде про що турбуватися. Накладні витрати додаткових ігрових об’єктів майже нічого не значить, тому не хвилюйтеся. У деяких випадках, якщо ви додаєте / видаляєте об'єкти часто, об'єднання об'єктів може бути рятувальником життя, а в інших випадках ви можете робити інші хитрощі. Все залежить від того, чи є і в чому саме проблема.
повернення справжнього
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.