Предисловие Добро пожаловать во вторую статью о разработке Just Shapes & Beats. Сегодня я продолжу первую статью и расскажу об использовании Canvas, Unity Timeline и немного об оптимизации.
Использование холста
Скомпилировав игру на Android, я обнаружил, что размеры объектов совершенно не соответствуют размерам на мониторе компьютера, на котором я запускал игру.Изучив документацию Unity и дополнительную информацию, я понял, что мне нужно использовать Canvas. После создания холста у меня появилась возможность абсолютно точно позиционировать и масштабировать объекты на экране и теперь объекты на экране телефона отображались корректно.
Оптимизация
Перейдем к теме оптимизации.Так как все объекты я изначально создавал через Instantiate, а количество вызовов этого метода иногда доходило до 100 раз за кадр, мне нужно было оптимизировать их создание.
После очередной перелопатки разных материалов прочитал, что для таких целей существует пул предметов.
Это работает следующим образом:
- В методе Start создается необходимое количество объектов и делается неактивными, чтобы не нагружать память.
- Каждый объект записывается в список
- Когда мы вызываем метод 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. В качестве источника информации я использовал эту статью: Как создавать собственные маркеры временной шкалы - Блог Unity Technologies blogs.unity3d.com Здесь подробно описывается, как создавать собственные уведомления, маркеры, как их стилизовать и т. д.
Создание уровней
Фактически, используя Unity Timeline, я обрек себя на вечные муки.Поскольку в JSAB каждая атака имеет свое время предупреждения и время активности, мне нужно было создать каждый маркер на секунду-две раньше, чтобы это предупреждение сработало.
Именно этот фактор и создал все проблемы.
Для удобства я назначил создание каждой атаки на свою клавишу и добавил стандартное смещение по времени в одну секунду.
Первый выпуск
Где-то в июле я выпустил на Gamejolt первую сборку игры, она была очень сырая, но уровней было несколько.Также чуть позже я переписал игру в целях оптимизации (подробнее об этом в следующей статье) и создал еще три новых уровня.
После создания последнего уровня мое терпение лопнуло и я понял, что мне нужен нормальный редактор уровней.
Я переписал игру в третий раз и занялся ее разработкой.
Именно об этом я буду говорить в следующих статьях.
Спасибо за внимание! Теги: #Разработка игр #gamedev #C++ #unity #jsab #JSAB #jsb #JSB #gamedevelop
-
Centos 7 И Контроллер Hpe B320I
19 Oct, 24 -
Мы Проходим Испытание Regexplay На 100%
19 Oct, 24 -
Три Шага К Успеху Мобильных Nfc-Решений
19 Oct, 24 -
Intel Создаст Серверные Флешки
19 Oct, 24