Затухание слоя параллакса в единстве

Я сделал эффект затухания на слое параллакса, и я сделал это:

if (currentBackgroundPhase == BackgroundPhase.Night)
{
    foreach(SpriteRenderer sprite in GetComponentsInChildren<SpriteRenderer>())
    {
        if (sprite.name.Contains("Cloud"))
        {
            sprite.color = new Color(opaqueCloud.r, opaqueCloud.g, opaqueCloud.b, transitionTimeElapsed / TRANSITION_TIME);
        }
    }
}

Параллакс продолжает перемещать облачные спрайты, и это единственный способ, которым я могу это сделать. Я просмотрел профилировщик и не заметил снижения производительности при вызове if. Это слишком дорого/неэффективно из-за GetComponensInChildren? Если да, то есть ли другой способ сделать это?

Я посмотрел на графику скриптов профилировщика, чтобы увидеть, не слишком ли это много, но не заметил ничего странного.

Я не могу протестировать на плохом устройстве, потому что у меня его нет, и я хочу, чтобы это работало на каждом устройстве Android...

Максимальное количество спрайтердереров, которые могут быть у детей, составляет 20 или около того.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать объединить игровые объекты. Просто активировать деактивировать их.

Если одно облако прозрачно на 100 %, вы можете деактивировать его и повторно использовать в другом месте. Если вы перемещаете облака, это должно быть возможно.

Они отображаются на экране все время (это фон), так что это не вариант.

janavarro 02.06.2019 13:08

Ну, если одно облако на 100% прозрачно, вы можете деактивировать его и повторно использовать где-то еще, или я неправильно понял. Если вы перемещаете облака, это должно быть возможно.

VisDesign 02.06.2019 13:10

Проблема в том, что они прозрачны только на 1 кадр, большую часть времени они как привидение, но все равно спасибо.

janavarro 03.06.2019 11:24

Что ж, попробуйте объединиться, если вы генерируете и уничтожаете. Повторно используйте свои облака, а не уничтожайте их

VisDesign 03.06.2019 13:41

Поскольку сценарий параллакса был внешним активом, я не знал, что элементы использовались повторно, но теперь я внимательно посмотрел, и он повторно использует его, изменяя положение изображений. Вопрос обновлен.

janavarro 03.06.2019 14:26

Вы вызываете свою функцию внутри обновления? Попробуйте назначить его один раз в начале, чтобы вы вызывали компонент get всего несколько раз, а не в каждом кадре. Создайте массив с компонентами и заполните его при запуске. После этого просто повторите свой массив.

VisDesign 03.06.2019 15:28
Ответ принят как подходящий

Хорошо, есть несколько советов, которые могут быть вам полезны

  1. При необходимости используйте объединение объектов, поскольку вам не нужно снова и снова уничтожать и создавать экземпляры облаков.
  2. Попробуйте избегать цикла Foreach, сейчас это незаметно, но это влияет на цикл for.

Если для каждого цикла, используемого для сбора или массива объектов (т. е. массива всех элементов, отличных от примитивного типа данных), вызывается GC (сборщик мусора), чтобы освободить место для ссылочной переменной в конце цикла для каждого цикла.

foreach (Gameobject obj in Collection)
{
    //Code Do Task
}

В то время как цикл for используется для перебора элементов с использованием индекса, поэтому примитивный тип данных не повлияет на производительность по сравнению с непримитивным типом данных.

for (int i = 0; i < Collection.length; i++){
    //Get reference using index i;
    //Code Do Task
}

Спасибо за совет foreach, я проведу рефакторинг циклов foreach.

janavarro 03.06.2019 14:28

Другие вопросы по теме