Как стать автором
Обновить

Комментарии 13

Так держать

Молодец! Теперь у тебя впереди лежит долгий и тернистый путь через долину, пройдя которую ты сильно изменишься. Главное - ни кого не слушай.

У вас определенно имеется чувство прекрасного: подбор цветов, расположение объектов. Тот случай когда первую игру можно сделать коммерческой, если изучить жанр, добавить интересных уровней и механик.

Не стесняйтесь. Мои две первые и единственные игры лишили меня необходимость ходить на обычную работу.

Для оптимизации нужно будет удалять все объекты, выходящие за экран, и использовать более производительные методы.

Можно ли ссылку на эти две игры

Пока игра находиться на модерации в ЯИграх, как только опубликую, обязательно поделюсь

Для первой игры очень даже неплохо, главное продолжать расти, а не стоять на одном месте.

Пару советов по поводу оптимизации.

  1. Пореже обращаться напрямую к полю transform.position объектов, особенно в часто вызываемых методах типа Update или в циклах, т.к. вызывается extern метод get_transform_Injected, что ресурсозатратно. Например, если есть возможность, постарайтесь кэшировать вектор позиции, особенно, если его значение не меняется. К примеру, ваш код ниже

private IEnumerator Spawn()
    {
        float minPositionY = transform.position.y - _devationPositionY;
        float maxPositionY = transform.position.y + _devationPositionY;

        while (_isGameOver == false)
        {
            float positionY = Random.Range(minPositionY, maxPositionY);

            _spawnTime = Random.Range(_minDelay, _maxDelay);

            var waitForSeconds = new WaitForSeconds(_spawnTime);

            GameObject gameObject = Instantiate(_templates[Random.Range(0, _templates.Length)],
                new Vector3(transform.position.x, positionY, transform.position.z), Quaternion.identity);

            yield return waitForSeconds;
        }
    }

можно слегка изменить и получить

private IEnumerator Spawn()
    {
        var spawnPosition = transform.position;
        float minPositionY = spawnPosition.y - _devationPositionY;
        float maxPositionY = spawnPosition.y + _devationPositionY;

        while (_isGameOver == false)
        {
            float positionY = Random.Range(minPositionY, maxPositionY);

            _spawnTime = Random.Range(_minDelay, _maxDelay);

            var waitForSeconds = new WaitForSeconds(_spawnTime);

            GameObject gameObject = Instantiate(_templates[Random.Range(0, _templates.Length)],
                new Vector3(spawnPosition.x, positionY, spawnPosition.z), Quaternion.identity);

            yield return waitForSeconds;
        }
    }

Конкретно в вашем случае прибавка к производительности будет не особо заметна, но когда будете создавать проекты побольше с сотнями объектов, это может дать неплохой баф к скорости.

  1. Вопреки мнению в комментарии другого пользователя

Для оптимизации нужно будет удалять все объекты, выходящие за экран...

много раз создавать и удалять однотипные объекты (например снаряды в шутерах или бомбы и фоновые объекты в вашей игре) методами GameObject.Instantiate и GameObject.Destroy не рекомендуется из-за количества создающегося мусора (особенно, если объект с большим количеством полей) и лишней нагрузки на процессов. Рекомендую посмотреть в сторону Пулов Объектов и вместо того, чтобы постоянно создавать и удалать новые объекты, вы создаете определенное их количество в Пуле при старте и при необходимости достаете их из этого пула, а вместо удаления просто делаете объекты неактивными. Если интересно, гляньте статью https://www.kodeco.com/847-object-pooling-in-unity .

"Преждевременная оптимизация - корень всех зол"©

Советы хорошие, не поспоришь. Но в этом конкретном, как и в 99% случаях - производительность страдать не будет, "и так сойдет", но код будет проще. Обычно производительность фиксят в последнюю очередь) Быстрый код плохо читаем. А больший прирост скорости может дать, например, какое-нибудь сжатие ассетов. Или исключение из обработки недвижимых объектов, как в движках физики. Но советы хорошие, повторюсь.

Молодец, движешься в правильном направлении. Рекомендую в первую очередь добавить пул, чтобы не создавать (и я не вижу здесь уничтожение) постоянно объекты. Это простое действие, но очень важное для оптимизации даже на этом этапе

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

у меня всего одна игра до релиза дошла.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории