Исчезать слой параллакса в единстве - PullRequest
0 голосов
/ 01 июня 2019

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

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 или около того.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

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

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

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

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
}
0 голосов
/ 02 июня 2019

Вы можете попробовать объединить Gameobjects. Просто активирую их отключение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...