Strangster

Strangster

На Пикабу
Дата рождения: 13 ноября 1990
поставил 243 плюса и 36 минусов
Награды:
5 лет на Пикабу
399 рейтинг 10 подписчиков 9 подписок 8 постов 1 в горячем

Скриншотный субботник #6

Ну что, продолжаем!

Выкладывайте скриншоты своих игр в разработке в комментарии, подписывайте название проекта, чего добились за неделю.

Скриншотный субботник #6 Screenshotsaturday, Gamedev, Скриншот, Разработка игр
p.s. Предыдущий субботник, из которого сделан коллаж, тут: https://pikabu.ru/story/skrinshotnyiy_subbotnik_5_5733569

Скриншотный субботник #4

Привет лиге!

Простите за долгое отсутствие, залип в PUBG и забыл про субботник.
Думал кстати, в моё отсутствие кто-то подхватит инициативу, это ведь совсем не трудно ;D

Скриншотный субботник #4 Screenshotsaturday, Gamedev

Ну как обычно, выкладывайте скрины в комментарии, пишите что сделали, что за проект.

Скриншотный субботник #3

Приветствую лигу разработчиков! Выкладывайте в комментарии скриншоты своих игр, что сделали за неделю)

Скриншотный субботник #3 Gamedev, Скриншот, Screenshotsaturday

Коллаж с прошлого субботника.

Когда в офисе душно, а коллегам холодно от открытых окон

Когда в офисе душно, а коллегам холодно от открытых окон Офис, Духота, Офисные войны

Писханул и купил сегодня такой воздуховод, достали мерзляки :)
Воздух свежий прям прёт! Стоило это удовольствие 200 рублей.
p.s. оставшуюся щель в форточке думаю заткнуть тряпками)

Показать полностью 1

Скриншотный субботник #2

Привет лиге разработчиков игр! Ну что, продолжаем!

Скриншотный субботник #2 Разработка игр, Gamedev, Screenshotsaturday

Оставляйте в комментариях скриншоты, гифки своих игр в разработке, название игры и что вы в ней сделали за последнее время.


Предыдущий субботник тут: https://pikabu.ru/story/skrinshotnyiy_subbotnik_pikabu_56296...

Скриншотный субботник пикабу

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

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

Отправляйте свои скриншоты в комментарии, поглядим, что там у вас происходит :)

P.S. Странно что в лиге до сих пор этой традиции нет.
Может быть всё дело в карме? Ведь кто-то должен сделать основной пост и ему пойдут плюсы, которых он по сути не заслужил. Тогда предлагаю постить по очереди, или кто первый успел начиная с 00:00 субботы, тот и молодец =) Мне лично не жалко плюсов даже если инициативить будет всё время один человек. Инициатива это тоже дело хорошее.

[Туториал] Простой и удобный пул объектов для Unity3D

Урок рассчитан на новичков, у профи я догадываюсь уже написаны свои супер пулы на все случаи жизни =)


Итак, вкратце - зачем же нужен пул и что это такое?
Пул нужен для оптимизации в тех играх, где часто создаются и уничтожаются какие-нибудь объекты. Например, пули или враги.

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

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

Вот так выглядит сборщик мусора в мобильной стрелялке без пулов:

[Туториал] Простой и удобный пул объектов для Unity3D Туториал, Gamedev, Unity, Unity3D, Гифка, Длиннопост

Так чем же нам поможет пул?
Очень просто - вместо уничтожения, объекты будут только деактивироваться, и записываться в пул, оставаясь таким образом в оперативной памяти. А вместо создания новых объектов, будут браться уже созданные объекты из пула, и только активироваться!

Дальше опишу свою реализацию пула на юнити, универсальную и простую в использовании:

Для начала инициализация:
[Туториал] Простой и удобный пул объектов для Unity3D Туториал, Gamedev, Unity, Unity3D, Гифка, Длиннопост

Метод PoolManager.init() надо будет дёрнуть в начале игры, передав в параметр трансформ того геймобжекта, который точно не будет уничтожаться. В этот геймобжект будут класться все деактивированные объекты, чтобы случайно не удалить их по ходу игры, вызвав Destroy() изначального родительского геймобжекта =)

Про словарь (Dictionary) будет дальше.

Функция получения объекта из пула:
[Туториал] Простой и удобный пул объектов для Unity3D Туториал, Gamedev, Unity, Unity3D, Гифка, Длиннопост

В параметр PoolManager.getGameObjectFromPool() надо передать префаб, по которому создаётся объект.

Все операции доставания из пула или укладывания в него происходят по имени префаба.

Строчка if(!poolsDictionary.ContainsKey(prefab.name)) проверяет, был ли уже в пуле объект от этого префаба, и если нет, то далее создаётся хранилище (LinkedList) для объектов которые создаются по этому префабу.


Строчка  if (poolsDictionary[prefab.name].Count > 0) проверяет, есть ли сейчас в хранилище деактивированные объекты от этого префаба. Если да, то объект берётся из хранилища, делается активным (SetActive()) и возвращается как результат работы функции.

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

Функция возврата объекта в пул:

[Туториал] Простой и удобный пул объектов для Unity3D Туториал, Gamedev, Unity, Unity3D, Гифка, Длиннопост

Тут всё просто, берётся имя объекта который мы хотим вернуть в пул, по этому имени в словаре находится хранилище, объект добавляется туда, переносится в безопасный parent и деактивируется.

Всё, пул готов!

Реализация очень простая, но у неё есть пара ограничений:
1) Нельзя делать префабы с одинаковыми названиями, лежащие в разных папках. В этом пуле они перемешаются потому что тут всё играется от названия префаба.
2) И соответственно нельзя динамически менять имя пулируемого геймобжекта, потому что оно должно быть как у префаба.

Но благодаря этим небольшим ограничениям, не надо возиться со всякими дополнительными компонентами типа IPoolable и т.д., мой пул очень прост в использовании. Просто вместо GameObject.Instantiate(prefab) вызываешь PoolManager.getFromPool(prefab), А вместо GameObject.Destroy(gameObject) PoolManager.putToPool(gameObject)

p.s. И конечно надо не забыть после взятия из пула проставить правильного родителя если это нужно, и прочие переменные вроде hp и так далее вернуть к исходным значениям.

Показать полностью 4

Как выглядит удаление пулек, вылетевших за камеру в игре

Как выглядит удаление пулек, вылетевших за камеру в игре Gamedev, Гифка, Стрельба, Unity, Unity3D, Первый пост, Компьютерные игры

Делаю тут потихоньку игру для мобильников, зрелище показалось любопытным, решил заснять. =)

Отличная работа, все прочитано!