Больше 3К просмотров на новом видео за выходные, что вы за львы?! 😎
Планирую сделать ремейки нескольких своих старых видео по некоторым причинам, одна из которых - это новые знания и новый (трезвый) взгляд на старое.
А в данный момент я пилю обнову для NightPool. Как раз можно будет запилить видос про новую версию, ибо изменений много.
Кстати, если есть кто из ЕКб, друг анонсировал встречу разработчиков игр, может кому интересно будет.
Планирую сделать ремейки нескольких своих старых видео по некоторым причинам, одна из которых - это новые знания и новый (трезвый) взгляд на старое.
А в данный момент я пилю обнову для NightPool. Как раз можно будет запилить видос про новую версию, ибо изменений много.
Кстати, если есть кто из ЕКб, друг анонсировал встречу разработчиков игр, может кому интересно будет.
👍35🥰2👎1🤬1
Я всё ещё пилю крупную обнову для NightPool, мне пришлось также доработать свой NightList для того, чтобы избавиться от аллокаций или свести их к минимуму в работе пула, а ещё, чтобы в некоторых местах можно было передавать структуры по ссылке, а не каждый раз их копировать.
Так вот, чтобы можно было использовать лист вот таким образом:
Так вот, чтобы можно было использовать лист вот таким образом:
private NightList<T> _nightList = new();То есть, чтобы писать сразу
var firstElement = _nightList[0];
_nightList[i]
вместо _nightList.Components[i]
, нужно написать следующее (обведено на скрине красным)👍28🔥6❤3👎1😱1
Внутри кода вы можете написать условную компиляцию
Но что делать, если вам нужно выполнять некоторый код не только в редакторе, но ещё и в Development билдах, а затем, после всех тестов на ошибки, убирать лишний код (например, некоторые проверки на
Для этого достаточно поменять препроцессорное выражение
#if UNITY_EDITORКод между директивами
...
#endif
#if
и #endif
будет выполняться только в Unity, но ни в одном из ваших билдов (даже в Development Build). Но что делать, если вам нужно выполнять некоторый код не только в редакторе, но ещё и в Development билдах, а затем, после всех тестов на ошибки, убирать лишний код (например, некоторые проверки на
null
и прочее) на релизе?Для этого достаточно поменять препроцессорное выражение
UNITY_EDITOR
на DEBUG
👍33❤6🔥6👎1🤔1
Безархетипные ECS фреймворки
Соскучился я по ECS + очень хотел изучить Jobs и внедрить в свою игру. Сначала, недолго думая, внедрил LeoECS Lite для некоторых систем в игре. Меня всегда привлекали ECS от Leo своей простотой и максимальным абстрагированием от движка (до этого я работал только с LeoECS Classic). Lite версия оказалась ещё более производительной, но тоже не без проблем, об этом расскажу прямо сейчас.
После внедрения LeoECS Lite в проект, я начал подробнее изучать фреймворки и наткнулся на Morpeh, на который по итогу и перешёл. Проблема была в том, что, увеличивая количество фильтров, сущностей и компонентов, производительность в безархетипных ECS, таких как LeoECS (Classic и Lite), неявно ухудшалась. Это чревато тем, что время выполнения кода, написанного годом ранее, могло занимать 1 условную миллисекунду, а сейчас на него могут уходить уже и 3, и 5 мс, и все 10 мс. Время выполнения кода будет расти неявным образом по мере роста проекта, что звучит не очень то и приятно. Если я ничего не путаю, эту проблему можно решить (частично) разбиением окружения на несколько ECS World, но такой подход, вероятно, может загонять некоторых людей в какие-то рамки.
В Morpeh нет такой проблемы, поэтому мой текущий выбор и пал на этот фреймворк. Вроде бы эту проблему Leo уже решил в новом LeoECS Proto, но этот фреймворк пока что свежий и платный, опробую его в деле спустя некоторое время.
Если вы пишите большой проект целиком и полностью на ECS, где в мир отправляется куча событий и запросов, а сущности постоянно добавляются, удаляются и/или меняются, то лично я бы не смотрел в сторону безархетипных ECS, хоть и считаю LeoECS Lite одним из лучших и самых простых ECS фреймворков и по сей день.
А какой ECS фреймворк вы используете в своём проекте? Ответ "никакой" тоже подходит 😄.
Соскучился я по ECS + очень хотел изучить Jobs и внедрить в свою игру. Сначала, недолго думая, внедрил LeoECS Lite для некоторых систем в игре. Меня всегда привлекали ECS от Leo своей простотой и максимальным абстрагированием от движка (до этого я работал только с LeoECS Classic). Lite версия оказалась ещё более производительной, но тоже не без проблем, об этом расскажу прямо сейчас.
После внедрения LeoECS Lite в проект, я начал подробнее изучать фреймворки и наткнулся на Morpeh, на который по итогу и перешёл. Проблема была в том, что, увеличивая количество фильтров, сущностей и компонентов, производительность в безархетипных ECS, таких как LeoECS (Classic и Lite), неявно ухудшалась. Это чревато тем, что время выполнения кода, написанного годом ранее, могло занимать 1 условную миллисекунду, а сейчас на него могут уходить уже и 3, и 5 мс, и все 10 мс. Время выполнения кода будет расти неявным образом по мере роста проекта, что звучит не очень то и приятно. Если я ничего не путаю, эту проблему можно решить (частично) разбиением окружения на несколько ECS World, но такой подход, вероятно, может загонять некоторых людей в какие-то рамки.
В Morpeh нет такой проблемы, поэтому мой текущий выбор и пал на этот фреймворк. Вроде бы эту проблему Leo уже решил в новом LeoECS Proto, но этот фреймворк пока что свежий и платный, опробую его в деле спустя некоторое время.
Если вы пишите большой проект целиком и полностью на ECS, где в мир отправляется куча событий и запросов, а сущности постоянно добавляются, удаляются и/или меняются, то лично я бы не смотрел в сторону безархетипных ECS, хоть и считаю LeoECS Lite одним из лучших и самых простых ECS фреймворков и по сей день.
А какой ECS фреймворк вы используете в своём проекте? Ответ "никакой" тоже подходит 😄.
👍24
Forwarded from Болтовня
Дневничок разработчика 1
Часть 1:
Пост из разряда TIL (Today i learned):
Мне тут подкинули такую штуку как Tuple, или - "Кортежи", это такой сахар для System.ValueTuple<...> который позволяет передавать несколько разнотипных данных сразу одной структурой
Вкратце - это штука, упрощающая синтаксис и доступ к данным, выглядит это как запись нескольких значений в одну переменную через запятую в скобках. как когда мы вводим данные в метод:
Часть 1:
Пост из разряда TIL (Today i learned):
Мне тут подкинули такую штуку как Tuple, или - "Кортежи", это такой сахар для System.ValueTuple<...> который позволяет передавать несколько разнотипных данных сразу одной структурой
Вкратце - это штука, упрощающая синтаксис и доступ к данным, выглядит это как запись нескольких значений в одну переменную через запятую в скобках. как когда мы вводим данные в метод:
var tuple = (11, 12, 13);это я сейчас создал кортеж на 3 Int, обращаться к ним можно через item1, 2, 3, но можно и индивидуально им задать имя.
var tuple = (first: 1, second: 2);но самое вкусное, что мне нравится. их можно использовать как вывод в методе. и да, тоже с индивидуальными именами
var foo = tuple.second
; // = 2
public static (int first, string second) GetData() {...}#unity #code #TIL #разработка
var data = GetData();
data.first // выведет какое то число
👍18🔥5👎4
Forwarded from Болтовня
Дневничок разработчика 1
Часть 2:
Сначала это просто показалось мне прикольной фичей, но когда я попробовал - это оказалось супер удобно, супер красиво и лаконично.
Сразу полезли идеи для реализации всяких хелперов:
Например для ботов идеально подойдет какой-нибудь метод измеритель, который сразу выведет все позиции, дистанции, направления для взгляда и разворот бота относительно игрока одним методом, без огромного списка out'ов в скобках.
Или еще вот скриншот, так я для бота сократил в квантуме получение некоторых параметров, что урезало несколько классов для ботов на десятки строк.
Вот статья на хабре с чуть более детальным описанием что это и с чем едят. есть конечно какие то подводные их использования наверное, но не думаю что это превратит код в адовую сатану, можно юзать.
Подсказал штуку NightTrainCode, спасибо ему за это)
#unity #code #TIL #разработка
Часть 2:
Сначала это просто показалось мне прикольной фичей, но когда я попробовал - это оказалось супер удобно, супер красиво и лаконично.
Сразу полезли идеи для реализации всяких хелперов:
Например для ботов идеально подойдет какой-нибудь метод измеритель, который сразу выведет все позиции, дистанции, направления для взгляда и разворот бота относительно игрока одним методом, без огромного списка out'ов в скобках.
Или еще вот скриншот, так я для бота сократил в квантуме получение некоторых параметров, что урезало несколько классов для ботов на десятки строк.
Вот статья на хабре с чуть более детальным описанием что это и с чем едят. есть конечно какие то подводные их использования наверное, но не думаю что это превратит код в адовую сатану, можно юзать.
Подсказал штуку NightTrainCode, спасибо ему за это)
#unity #code #TIL #разработка
👍19👎2
Не знаю почему дизы налетели на предыдущие месседжи, про прикольную фичу решил поведать, тем более админ нашего чата уже сам нарыл инфу и сэкономил мне время на пост. Сам я Tuple на практике не юзаю, предпочитаю под это дело структуры писать с необходимыми полями, но в некоторых кейсах эта фича может быть очень удобной.
Тем временем, апдейт для NightPool уже на финишной прямой. Завёз кучу новых функций, кучу проверок (для защиты от чайника), файлик package json и с гордостью можно будет назвать эту версию NightPool 3.0.
Какой производительности получилось добиться по сравнению с конкурентом (в лице LeanPool)?
Первичный Instantiate клона в пул:
Разброс 3% в пользу то одного, то другого👌
Spawn(GameObject prefab):
NightPool на 19% быстрее✅
Spawn(GameObject prefab, Transform parent):
NightPool на 25% быстрее✅
Spawn(T component):
NightPool на 20% быстрее✅
Spawn(T component, Transform parent):
NightPool на 28% быстрее✅
Despawn(GameObject clone):
NightPool на 15% быстрее✅
Despawn(T clone):
NightPool на 17% быстрее✅
Spawn(T component, Transform parent) с опцией Recycle:
NightPool на 80% быстрее🔥
Осталось самое душное - проверка на баги и обновление документации :D
P.S. Тесты проводил на префабе в виде примитива (куба) с одним рандомным компонентом. В качестве замеров производил по 1000 итераций за раз, был включён Deep Profiling. С другими, более тяжелыми префабами, картина может меняться, но не кардинально
Тем временем, апдейт для NightPool уже на финишной прямой. Завёз кучу новых функций, кучу проверок (для защиты от чайника), файлик package json и с гордостью можно будет назвать эту версию NightPool 3.0.
Какой производительности получилось добиться по сравнению с конкурентом (в лице LeanPool)?
Первичный Instantiate клона в пул:
Разброс 3% в пользу то одного, то другого
Spawn(GameObject prefab):
NightPool на 19% быстрее
Spawn(GameObject prefab, Transform parent):
NightPool на 25% быстрее
Spawn(T component):
NightPool на 20% быстрее
Spawn(T component, Transform parent):
NightPool на 28% быстрее
Despawn(GameObject clone):
NightPool на 15% быстрее
Despawn(T clone):
NightPool на 17% быстрее
Spawn(T component, Transform parent) с опцией Recycle:
NightPool на 80% быстрее
Осталось самое душное - проверка на баги и обновление документации :D
P.S. Тесты проводил на префабе в виде примитива (куба) с одним рандомным компонентом. В качестве замеров производил по 1000 итераций за раз, был включён Deep Profiling. С другими, более тяжелыми префабами, картина может меняться, но не кардинально
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥5🤔3👎1
Сегодня я отмечаю свой 21й день рождения! 🎁
А начинать этот день с игры в GTA Vice City и заканчивать поеданием любимого торта в кругу семьи уже стало моей традицией.🥳
Всем успехов!
А начинать этот день с игры в GTA Vice City и заканчивать поеданием любимого торта в кругу семьи уже стало моей традицией.
Всем успехов!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉116🔥19👍2
Всем привет, я не пропал, просто сейчас нахожусь в Екатеринбурге, а таких чудес как ноутбук и свободное время от изучения города у меня пока нет 😄
Сейчас у меня сложились только положительные впечатления от города. Здесь много крутых арт-объектов и музеев, а также много различных заведений, магазинов и сервисов, которых в моём родном Красноярске, к сожалению, нет. Зато есть Енисей и Столбы 😉
Ещё нас с подругой забавно и оригинально встретил в аэропорту мой друг и коллега по цеху Коля 🤣
А в субботу мы вместе пойдем на Гиккон, ни разу не был на таких мероприятиях, очень интересно будет посмотреть.
Ещё, кстати, мы на VR арене зарубилсь 3 на 3, не думал, что будет настолько круто и что мы вынесем оппонентов со счётом 5:0, несмотря на то, что мы с подругой играли впервые.
Сейчас у меня сложились только положительные впечатления от города. Здесь много крутых арт-объектов и музеев, а также много различных заведений, магазинов и сервисов, которых в моём родном Красноярске, к сожалению, нет. Зато есть Енисей и Столбы 😉
Ещё нас с подругой забавно и оригинально встретил в аэропорту мой друг и коллега по цеху Коля 🤣
А в субботу мы вместе пойдем на Гиккон, ни разу не был на таких мероприятиях, очень интересно будет посмотреть.
Ещё, кстати, мы на VR арене зарубилсь 3 на 3, не думал, что будет настолько круто и что мы вынесем оппонентов со счётом 5:0, несмотря на то, что мы с подругой играли впервые.
❤25🔥13👍5👎1🤬1
С днём знаний! 😎
Самое время изучить что-то новое. Я вернулся из Екатеринбурга и можно снова преисполняться в программировании путём завершения написания апдейта для NightPool 🫠.
Времени на видео всё меньше, поэтому я могу попробовать записывать их лайвом (без тонны монтажа), донося при этом ту же самую информацию. Может так будет даже более душевно, что думаете?)
Кстати, отдельную благодарность хочу выразить моему другу Коле и порекомендовать его тг канал. Коля сам решил встретить нас в аэропорту и практически каждый день показывал нам город.
Ещё мы сходили на встречу с разработчиками Кроссаута. Быстро ушли оттуда, ибо у них не было никакого плана и встреча началась со слов: «задавайте вопросы», а затем пошло бурное обсуждение сюжета (или его отсутствия, честно, не знаю, не играл в Кроссаут) в мультиплеерной соревновательной игре...
Затем мы поехали на Гиккон, было прикольно от того, что в России проводятся такие крупные мероприятия, на которых собирается столько людей (минимум половина из которых — в костюмах).
Мы, правда, не фанаты аниме и косплея, поэтому мало чего нашли там для себя интересного, а самым крутым в тот день было after-party 🔥. Нас было человек 15-20 (в основном Unity разработчики), сидели в баре и все дружно общались на одном языке. Это было очень кайфово, ибо в Красноярске у меня нет ни одного друга-программиста и я не слышал, чтобы у нас так собирались коллеги по цеху 🥹.
А Екатеринбург мне, кстати, очень понравился ❤️
Самое время изучить что-то новое. Я вернулся из Екатеринбурга и можно снова преисполняться в программировании путём завершения написания апдейта для NightPool 🫠.
Времени на видео всё меньше, поэтому я могу попробовать записывать их лайвом (без тонны монтажа), донося при этом ту же самую информацию. Может так будет даже более душевно, что думаете?)
Кстати, отдельную благодарность хочу выразить моему другу Коле и порекомендовать его тг канал. Коля сам решил встретить нас в аэропорту и практически каждый день показывал нам город.
Ещё мы сходили на встречу с разработчиками Кроссаута. Быстро ушли оттуда, ибо у них не было никакого плана и встреча началась со слов: «задавайте вопросы», а затем пошло бурное обсуждение сюжета (или его отсутствия, честно, не знаю, не играл в Кроссаут) в мультиплеерной соревновательной игре...
Затем мы поехали на Гиккон, было прикольно от того, что в России проводятся такие крупные мероприятия, на которых собирается столько людей (минимум половина из которых — в костюмах).
Мы, правда, не фанаты аниме и косплея, поэтому мало чего нашли там для себя интересного, а самым крутым в тот день было after-party 🔥. Нас было человек 15-20 (в основном Unity разработчики), сидели в баре и все дружно общались на одном языке. Это было очень кайфово, ибо в Красноярске у меня нет ни одного друга-программиста и я не слышал, чтобы у нас так собирались коллеги по цеху 🥹.
А Екатеринбург мне, кстати, очень понравился ❤️
👍20❤3😢3👎1