Русский
Русский
English
Статистика
Реклама

Разработка своей Just Shapes ampamp Beats. Канвас и немного об оптимизации

Предисловие

Добро пожаловать во вторую статью о разработке своей Just Shapes & Beats. Сегодня я продолжу первую статью и расскажу вам об использовании канваса, Unity Timeline'а и немного об оптимизации.

Использование канваса

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

Оптимизация

Приступим к теме оптимизации. Так как я изначально создавал все объекты через Instantiate, а количество вызовов этого метода порой доходило до 100 раз за один кадр, мне понадобилось оптимизировать их создание. После очередного перелопачивания разных материалов, я вычитал, что для таких целей существует пул объектов. Работает он следующим образом:

  • В методе Start создаётся нужное количество объектов и делается неактивным, чтобы не загружать память

  • Каждый объект записывается в List<GameObject>

  • Когда мы вызываем метод GetObject мы берём последний элемент, удаляем его из списка, делаем его активным и возвращаем. Если объекты закончились, то мы создаём их через Instantiate и так же возвращаем.

  • Когда мы вызываем метод ReturnObject мы должны передать в него какой-то GameObject, этот GameObject сделается неактивным и запишется в List.

Скрипт пула выглядит вот так:

public class Pool : MonoBehaviour    {        public List<GameObject> PoolObjects = new List<GameObject>();        public GameObject Instance;        public void Init(int instanceCount, GameObject instance){            for(int i = 0; i < instanceCount; i++){                GameObject _instance = GameObject.Instantiate(instance) as GameObject;                _instance.transform.SetParent(Utils.Global.Arena, false);                _instance.SetActive(false);                PoolObjects.Add(_instance);            }            Instance = instance;        }        public GameObject GetObject(){            if(PoolObjects.Count > 0) {                GameObject _instance = PoolObjects[PoolObjects.Count - 1] as GameObject;                PoolObjects.Remove(PoolObjects[PoolObjects.Count - 1]);                _instance.SetActive(true);                return _instance;            }            else{                GameObject _instance = GameObject.Instantiate(Instance) as GameObject;                _instance.transform.SetParent(Utils.Global.Arena, false);                _instance.SetActive(true);                return _instance;            }        }        public void ReturnObject(GameObject instance){            instance.SetActive(false);            PoolObjects.Add(instance);        }    }

Создание пула довольно хорошо подняло производительность, но игра всё ещё тормозила. Я нашёл ещё один способ оптимизации, но о нём я расскажу уже в следующей статье.

Редактор уровней

Поговорим немного о редакторе. Он был основал на Unity Timeline, там есть такая замечательная штука как Marker - это что-то вроде команды, которая отправляется в заданное время. Также есть возможность создавать кастомные маркеры и выполнять с помощью них всё, что угодно.

Вкратце код маркера выглядит вот так:

public class NotificationMarker : Marker, INotification{   public PropertyName id { get; }}

Также в этот маркер мы можем занести какие-то данные и изменять их напрямую через Unity. В качестве информационного источника я использовал эту статью:

В ней подробно описано, как можно создать кастомные Notification'ы, маркеры, как их стилизовать и т.д.

Создание уровней

На самом деле, используя Unity Timeline, я обрёк себя на вечные мучения. Так как в JSAB у каждой атаки есть своё время предупреждения и активное время, мне нужно было создавать каждый маркер на секунду или две раньше, чтобы это предупреждение сработало. Именно этот фактор и создавал все проблемы. Для удобства я назначил создание каждой атаки на свою клавишу и добавил стандартное смещение по времени на одну секунду.

Первый релиз

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

Также немного позже я переписал игру с целью оптимизации (подробнее об этом в следующей статье) и создал ещё три новых уровня.

После создания последнего уровня моё терпение лопнуло и я понял, что мне нужен нормальный редактор уровней. Я в третий раз переписал игру и взялся за его разработку. Как раз об этом я и расскажу в следующих статьях. Спасибо за внимание!

Источник: habr.com
К списку статей
Опубликовано: 16.04.2021 12:14:51
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка игр

C

Unity

Jsab

Jsb

Gamedev

Gamedevelop

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru