Appmetrica и IOS
Настоящий кроссплатформенный разработчик — это не тот, кто знает кроссплатформенный фреймворк. А тот кто ещё понимает нюансы самих платформ. Итак, андроид мы победили (обновив ARFoundation до 5.0.3) Теперь поговорим про айос.
На айос, особенно если вы как и я сборки собираете под виндой, может возникнуть такая ошибка (кстати не только с этим плагином).
1. Установить cocoapods
2. Установить гит (если он не стоит для терминала)
3. Сделать cd в папку с собранным xcode проектом
4. Сделать команду pod install в ней
5. Зайти в появишийся xcworkspace файл
6. (Возможно) потребуется ещё а проекте Pods-Unity-Iphone поставить Enable Bitcode в Build Options
И вуаля. Всё соберётся. Под макосью такая проблема тоже может возникнуть, если кокоаподс не стоит или стоит как-то криво. Чисто по той причине, что юнити не вернёт вам ошибку, а просто не соберёт xcworkspace.
Возможно там ещё будут какие ошибки в подсах, но они уже гуглятся. Думаю это может кому-то сэкономить часы времени поисков решения этой проблемы
#советы
Настоящий кроссплатформенный разработчик — это не тот, кто знает кроссплатформенный фреймворк. А тот кто ещё понимает нюансы самих платформ. Итак, андроид мы победили (обновив ARFoundation до 5.0.3) Теперь поговорим про айос.
На айос, особенно если вы как и я сборки собираете под виндой, может возникнуть такая ошибка (кстати не только с этим плагином).
'YandexMobileMetrica/YandexMobileMetrica.h' file not found
При этом не будет файла xcworkspace, только xcproject. Дело в том, что обычно такие плагины и зависимости подключаются через cocoapods. Чинится это довольно просто. На макбуке.1. Установить cocoapods
2. Установить гит (если он не стоит для терминала)
3. Сделать cd в папку с собранным xcode проектом
4. Сделать команду pod install в ней
5. Зайти в появишийся xcworkspace файл
6. (Возможно) потребуется ещё а проекте Pods-Unity-Iphone поставить Enable Bitcode в Build Options
И вуаля. Всё соберётся. Под макосью такая проблема тоже может возникнуть, если кокоаподс не стоит или стоит как-то криво. Чисто по той причине, что юнити не вернёт вам ошибку, а просто не соберёт xcworkspace.
Возможно там ещё будут какие ошибки в подсах, но они уже гуглятся. Думаю это может кому-то сэкономить часы времени поисков решения этой проблемы
#советы
Telegram
Григорий Дядиченко
Appmetrica и ARCore
Программирование было бы простой работой, если бы всё работало из коробки. Забавное наблюдение. Это конечно не коснётся вас если вы юзаете ARCore XR Plugin 5.0 в Unity (так как это баг аркора до 1.24 версии, которая в 4+ ARCore Unity).…
Программирование было бы простой работой, если бы всё работало из коробки. Забавное наблюдение. Это конечно не коснётся вас если вы юзаете ARCore XR Plugin 5.0 в Unity (так как это баг аркора до 1.24 версии, которая в 4+ ARCore Unity).…
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Рисуем график
#задачка
Давайте элегантно нарисуем график функции y = x ^ 2 в UI в Unity. Задачку нужно решить с использованием MaskableGraphic и VertexHelper.
Решение:https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task_2/Scripts/GraphRenderer.cs
Обоснование к решению я напишу в спойлере ниже. Сразу скажу, что задача на знание того, как делаются кастомные UI компоненты с рядом важных нюансов. Из-за чего решается она не элементарно.
Плюс добавлю опрос. Интересен ли такой формат задач или слишком сложно?
#задачка
Давайте элегантно нарисуем график функции y = x ^ 2 в UI в Unity. Задачку нужно решить с использованием MaskableGraphic и VertexHelper.
Решение:
Плюс добавлю опрос. Интересен ли такой формат задач или слишком сложно?
👍13
Григорий Дядиченко
Рисуем график #задачка Давайте элегантно нарисуем график функции y = x ^ 2 в UI в Unity. Задачку нужно решить с использованием MaskableGraphic и VertexHelper. Решение: https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task…
Комментарий к решению задачке "Рисуем график"
Дальше под спойлером нюансы решения. Просто разбора такого примера недостаточно для "статьи на хабр". А знание довольно полезное и может пригодиться.
В Unity есть замечательная возможность через меш генерацию делать свои кастомные UI элементы. По сути для этого нужно унаследовать класс от MaskableGraphic. Переопределить метод OnPopulateMesh(VertexHelper vh) и сделать свою реализацию этого метода. Но тут есть несколько нюансов, которые стоит знать, чтобы "чудо произошло".
Чтобы график в целом нарисовался, помимо самого скрипта на объекте должен находится CanvasRenderer. Иначе ничего не будет рендерится и не будет вызываться метод OnPopulateMesh
Помимо этого можно затереть базовую реализацию этого метода, так как она делает лишние вещи.
Дальше нужно немного понимать в меш генерацию. И сделать генератор нужного нам меша с VertexHelper.
Дальше нужно разобраться с системой координат. Там много способов сделать самые разные варианты.
Моё решение выше, оно как бы общее. Можно было бы элегантно сгенерить меш под график y = x ^ 2, но по сути данное решение позволяет легко нарисовать любой график.
Важно понимать, что суть задачи не в конкретной реализации (как и всех задач в будущем, так как у всех реализация будет разная). А в сути на что это упражнение и какие нюансы нужно знать, чтобы его в целом сделать. Тут нужно в первую очередь знать про CanvasRenderer и про то, как делаются кастомные UI элементы. Причём проще всего наследоваться от MaskableGraphic, чтобы просто не прокидывать логику реализации масок и т.п.
Дальше под спойлером нюансы решения. Просто разбора такого примера недостаточно для "статьи на хабр". А знание довольно полезное и может пригодиться.
Чтобы график в целом нарисовался, помимо самого скрипта на объекте должен находится CanvasRenderer. Иначе ничего не будет рендерится и не будет вызываться метод OnPopulateMesh
Помимо этого можно затереть базовую реализацию этого метода, так как она делает лишние вещи.
Дальше нужно немного понимать в меш генерацию. И сделать генератор нужного нам меша с VertexHelper.
Дальше нужно разобраться с системой координат. Там много способов сделать самые разные варианты.
Моё решение выше, оно как бы общее. Можно было бы элегантно сгенерить меш под график y = x ^ 2, но по сути данное решение позволяет легко нарисовать любой график.
Важно понимать, что суть задачи не в конкретной реализации (как и всех задач в будущем, так как у всех реализация будет разная). А в сути на что это упражнение и какие нюансы нужно знать, чтобы его в целом сделать. Тут нужно в первую очередь знать про CanvasRenderer и про то, как делаются кастомные UI элементы. Причём проще всего наследоваться от MaskableGraphic, чтобы просто не прокидывать логику реализации масок и т.п.
🔥6👍2
Григорий Дядиченко
Рисуем график #задачка Давайте элегантно нарисуем график функции y = x ^ 2 в UI в Unity. Задачку нужно решить с использованием MaskableGraphic и VertexHelper. Решение: https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task…
Интересны ли такие задачи на знание нюансов в Unity? Просто мне не хочется перепечатывать стандартные задачи типа "сделай класс зоопарка с тиграми". Хочется задачи на конкретные нюансы Unity. А они будут требовать некоторых усилий.
Anonymous Poll
74%
Да, супер. Задачка интересная.
3%
Нет, хочется, задачи которые можно решить в уме.
5%
Нет, слишком сложно и непонятно.
19%
Интересная задачка, но делать я её не буду. Так как долго
Как сделать билд минимального размера в Unity?
https://habr.com/ru/post/709126/
А вот и статья про то где и что можно поджать внутренними инструментами Unity и рядом дополнительных техник. Без узких глубоких оптимизаций конечно, так как есть ещё техники подходящие прям совсем конкретным проектам. Вроде получилось неплохо пройтись галопом по европам. А остальное уже очень специфичная конкретика проектов.
Часть вещей для многих думаю будут банальными и очевидными. Вроде атласов. А про найн слайс и вертексные параметры — то что про это не думают, и я замечал довольно часто перехватывая чужие проекты. Плюс по нюансам я сталкивался с тем, что кто-то пытался оптимизировать размер изображений в проекте с помощью утилит мака и т.п. Хотя это не работает.
А так ответ на вопрос конечно получился длинноват :) Напоминаю, что вопросы можно задавать тут.
#статья
https://habr.com/ru/post/709126/
А вот и статья про то где и что можно поджать внутренними инструментами Unity и рядом дополнительных техник. Без узких глубоких оптимизаций конечно, так как есть ещё техники подходящие прям совсем конкретным проектам. Вроде получилось неплохо пройтись галопом по европам. А остальное уже очень специфичная конкретика проектов.
Часть вещей для многих думаю будут банальными и очевидными. Вроде атласов. А про найн слайс и вертексные параметры — то что про это не думают, и я замечал довольно часто перехватывая чужие проекты. Плюс по нюансам я сталкивался с тем, что кто-то пытался оптимизировать размер изображений в проекте с помощью утилит мака и т.п. Хотя это не работает.
А так ответ на вопрос конечно получился длинноват :) Напоминаю, что вопросы можно задавать тут.
#статья
Хабр
Как сделать билд минимального размера в Unity?
Всех с Новым Годом! Меня зовут Григорий Дядиченко, и я технический продюсер. Размер билда. Сегодня хотелось бы поговорить о нём и составить некий чек-лист, который полезно проходить перед выкладкой...
🔥19👍7
Григорий Дядиченко pinned «Как сделать билд минимального размера в Unity? https://habr.com/ru/post/709126/ А вот и статья про то где и что можно поджать внутренними инструментами Unity и рядом дополнительных техник. Без узких глубоких оптимизаций конечно, так как есть ещё техники подходящие…»
Как достигнута комиксная стилистика в игре Rollerdrome
https://www.youtube.com/watch?v=G1NY0LKDqJo
Классное видео про то, как можно достичь визуала комикса в Unity. Так сказать как красиво нарисовать аутлайны на 3д моделях.
#новости
https://www.youtube.com/watch?v=G1NY0LKDqJo
Классное видео про то, как можно достичь визуала комикса в Unity. Так сказать как красиво нарисовать аутлайны на 3д моделях.
#новости
YouTube
Achieving Rollerdrome's iconic comic book aesthetic | Unity
Read the full Rollerdrome case study: https://unity.com/case-study/rollerdrome
Watch the full stream on Unity's Twitch channel: https://twitch.tv/videos/1559435953
Alina Sommer, Technical Artist at Roll7, walks us through how the team achieved the iconic…
Watch the full stream on Unity's Twitch channel: https://twitch.tv/videos/1559435953
Alina Sommer, Technical Artist at Roll7, walks us through how the team achieved the iconic…
👍5
Unity Deque
https://github.com/Nox7atra/Unity-Deque
Для разминки написал коллекцию Deque (Double-ended Queue) и вынес в пакет. Она бывает полезной для операций где нужно быстро добавление удаление из начала или из конца и важен порядок. В отличии от классической реализации таких очередей она опирается не на массив, а на LinkedList, который позволяет делать по сути всё тоже самое. Только Deque с чуть более привычной сигнатурой класса для очереди и ограничениями доступа. Dequeue, Peek и так далее. Ну в общем требование добавление и удаление из начала и из конца в О(1) соблюдено. Как и отсутствие доступа к ненужным операциям (доступ к вершинам связанного списка). Так как коллекция возвращает везде только значения.
Да, можно было избежать дублирования кода, написать обощающие методы. Но когда пишутся свои коллекции лучше писать с дублированием, чтобы просто код был оптимальнее и не делал лишних проверок.
#репозитории
https://github.com/Nox7atra/Unity-Deque
Для разминки написал коллекцию Deque (Double-ended Queue) и вынес в пакет. Она бывает полезной для операций где нужно быстро добавление удаление из начала или из конца и важен порядок. В отличии от классической реализации таких очередей она опирается не на массив, а на LinkedList, который позволяет делать по сути всё тоже самое. Только Deque с чуть более привычной сигнатурой класса для очереди и ограничениями доступа. Dequeue, Peek и так далее. Ну в общем требование добавление и удаление из начала и из конца в О(1) соблюдено. Как и отсутствие доступа к ненужным операциям (доступ к вершинам связанного списка). Так как коллекция возвращает везде только значения.
Да, можно было избежать дублирования кода, написать обощающие методы. Но когда пишутся свои коллекции лучше писать с дублированием, чтобы просто код был оптимальнее и не делал лишних проверок.
#репозитории
GitHub
GitHub - Nox7atra/Unity-Deque: Deque Collection Realization for Unity
Deque Collection Realization for Unity. Contribute to Nox7atra/Unity-Deque development by creating an account on GitHub.
👍12
Год из жизни CTO в GameDev
https://habr.com/ru/post/709124/
Интересная статья про опыт CTO в игровой индустрии. Даже добавить особо нечего :)
#новости
https://habr.com/ru/post/709124/
Интересная статья про опыт CTO в игровой индустрии. Даже добавить особо нечего :)
#новости
Хабр
2022. Год из жизни CTO в GameDev
Доброго времени, Хабр! Сначала немного представлюсь. Меня зовут Сергей. В IT я уже более 13 лет из них в GameDev уже более восьми. Так вышло, что до написания статьи на Хабр дошел только сейчас. И...
👍2
Media is too big
VIEW IN TELEGRAM
"Бесконечный" скролл
#задачка
Сделать скролл который будет вмещать в себя 500 000 элементов случайного размера по высоте и не будет тормозить. Например игровой чат или система диалога, где размер текста непредсказуем.
Решение:
https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task_3/Scripts/FastDialogScreen.cs
https://github.com/Nox7atra/Unity-Test-Tasks/blob/master/Assets/Unity-Test-Tasks/Task_3/Scripts/DialogBubble.cs
В репозитории я убрал мок генерацию 721 000 строк, так как не у всех сцена с таким числом запустится. Это просто дорого по оперативной памяти. Это задачка возможно даже посложнее, чем прошлая.
#задачка
Сделать скролл который будет вмещать в себя 500 000 элементов случайного размера по высоте и не будет тормозить. Например игровой чат или система диалога, где размер текста непредсказуем.
Решение:
👍7
Григорий Дядиченко
"Бесконечный" скролл #задачка Сделать скролл который будет вмещать в себя 500 000 элементов случайного размера по высоте и не будет тормозить. Например игровой чат или система диалога, где размер текста непредсказуем. Решение: https://github.com/Nox7atra/Unity…
Обоснование задачки "Бесконечный" скролл
Скриншот так сказать для пруфов. На видео листается 720 896 элементов. Просто тормозит оно не из-за скролла, а из-за отрисовки инспектора. Если цеплять это окно. Так вот, а теперь по деталям решения задачи.
В первую очередь это задача на знание того, как сделать "свой контент сайз фиттер" и понимание, чем плохи лейауты Unity. Так как на лейаутах всё ляжет даже на 100 элементах на мобилках. И оно уже будет тормозить.
Окна адаптирующиеся под текст делаются очень просто. Для этого надо знать про существование метода. GetPreferredValues в TextMeshPro. И уметь работать с размерами RectTransform.
Из важных нюансов, что для контроля высоты нужно прописывать доп. параметры в метод. В виде желаемой ширины и желаемой высоты. Так как иначе юнити берёт настройки не из рект трансформа, а судя по всему из шрифта.
А вот часть с бесконечным скроллом уже сложнее. Так как нужно понимать, как работать с пулом, со скролл вью и с тем, как делаются в целом нетормозящие скроллы.
Просто плохо сделанные скроллы — это моя боль. Первый проект, который я делал на фрилансе ещё пять лет назад передали мне со скроллом на лейаутах и контент сайз фиттерах юнити. И на 40 элементах оно не выдавало 60 фпс на топовом устройстве. А на скроллах очень заметны тормоза. Поэтому у меня в целом аллергия на Unity лейауты.
Тут просто показано решение одним скриптом, как с помощью методов расчитать размер контента и вместо 720к+ элементов мы будем переставлять 8 элементов. И в этом весь трюк. Плюс ряд оптимизаций. Остальное можно понять разобрав код.
Скриншот так сказать для пруфов. На видео листается 720 896 элементов. Просто тормозит оно не из-за скролла, а из-за отрисовки инспектора. Если цеплять это окно. Так вот, а теперь по деталям решения задачи.
Окна адаптирующиеся под текст делаются очень просто. Для этого надо знать про существование метода. GetPreferredValues в TextMeshPro. И уметь работать с размерами RectTransform.
Из важных нюансов, что для контроля высоты нужно прописывать доп. параметры в метод. В виде желаемой ширины и желаемой высоты. Так как иначе юнити берёт настройки не из рект трансформа, а судя по всему из шрифта.
А вот часть с бесконечным скроллом уже сложнее. Так как нужно понимать, как работать с пулом, со скролл вью и с тем, как делаются в целом нетормозящие скроллы.
Просто плохо сделанные скроллы — это моя боль. Первый проект, который я делал на фрилансе ещё пять лет назад передали мне со скроллом на лейаутах и контент сайз фиттерах юнити. И на 40 элементах оно не выдавало 60 фпс на топовом устройстве. А на скроллах очень заметны тормоза. Поэтому у меня в целом аллергия на Unity лейауты.
Тут просто показано решение одним скриптом, как с помощью методов расчитать размер контента и вместо 720к+ элементов мы будем переставлять 8 элементов. И в этом весь трюк. Плюс ряд оптимизаций. Остальное можно понять разобрав код.
👍10
Интересная подборка туториалов от Unity
https://blog.unity.com/games/7-tutorials-to-help-uplevel-your-unity-skills-in-2023
Прикольный набор курсов для новичков. Даже AR охватывает. Правда фейсмаски меня сначала заинтриговали, а потом это оказывается про айос. Так что ничё особо нового :) Но всё равно неплохие обзорные курсы и бесплатные в плюс к тому.
#новости
https://blog.unity.com/games/7-tutorials-to-help-uplevel-your-unity-skills-in-2023
Прикольный набор курсов для новичков. Даже AR охватывает. Правда фейсмаски меня сначала заинтриговали, а потом это оказывается про айос. Так что ничё особо нового :) Но всё равно неплохие обзорные курсы и бесплатные в плюс к тому.
#новости
Unity Blog
7 tutorials to help uplevel your Unity skills in 2023 | Unity Blog
Have a Unity-centered New Year’s resolution? We’ve curated seven resources to help you conquer new skills or improve upon existing ones in 2023.
👍3❤1
Про JPEG
https://www.youtube.com/watch?v=0me3guauqOU
Интересный ролик про JPEG. Всегда интересно разбирать алгоритмы сжатия и т.п. Когда понимаешь идеи лежащие в этом всём, то становится понятнее как решать более сложные задачи. А текстуры — это одна из основных сущностей игровой разработке. И понимать их устройство, что такое цветовые пространства, что такое изображение в памяти и так далее. Это даёт в разы больше инструментов для реализации классных проектов.
#интересное
https://www.youtube.com/watch?v=0me3guauqOU
Интересный ролик про JPEG. Всегда интересно разбирать алгоритмы сжатия и т.п. Когда понимаешь идеи лежащие в этом всём, то становится понятнее как решать более сложные задачи. А текстуры — это одна из основных сущностей игровой разработке. И понимать их устройство, что такое цветовые пространства, что такое изображение в памяти и так далее. Это даёт в разы больше инструментов для реализации классных проектов.
#интересное
YouTube
The Unreasonable Effectiveness of JPEG: A Signal Processing Approach
Visit https://brilliant.org/Reducible/ to get started learning STEM for free, and the first 200 people will get 20% off their annual premium subnoscription.
Chapters:
00:00 Introducing JPEG and RGB Representation
2:15 Lossy Compression
3:41 What information…
Chapters:
00:00 Introducing JPEG and RGB Representation
2:15 Lossy Compression
3:41 What information…
👍8
Media is too big
VIEW IN TELEGRAM
Doom запустили в инспекторе
https://github.com/xabblll/DoomInUnityInspector
Есть такое дело, дум запускать где угодно. И вот и на Unity запустили Doom. Можно поиграть в инспекторе :) Если вдруг кто забыл управление. Ctrl стрелять, пробел открывать использовать (открывать двери)
Чтобы установить себе в редактор и заниматься более важными вещами чем какая-то там разработка нужно в Package Manager добавить git url https://github.com/xabblll/DoomInUnityInspector.git
И всё. Дум работает. На версии 2021.3.16 — протестировано :)
#новости
https://github.com/xabblll/DoomInUnityInspector
Есть такое дело, дум запускать где угодно. И вот и на Unity запустили Doom. Можно поиграть в инспекторе :) Если вдруг кто забыл управление. Ctrl стрелять, пробел открывать использовать (открывать двери)
Чтобы установить себе в редактор и заниматься более важными вещами чем какая-то там разработка нужно в Package Manager добавить git url https://github.com/xabblll/DoomInUnityInspector.git
И всё. Дум работает. На версии 2021.3.16 — протестировано :)
#новости
😁21
Как же иногда бесит Git LFS
Git lfs часто и любопытно ломается. То какой-то файл найти не может, то что-то ещё. Особенно забавно он себя начинает вести с несколькими ремоутами. Так как там если у тебя локально нет какого-то файла, то запушить бывает целым приключением. За последние 2 месяца правил я какие-то проблемы уже дважды. Сейчас вот, так как у нас был переезд сервера гитлаба на новый, то как бы гит проблемы не увидел. Того, что это атака по середине и его ssh клиент почему-то не ругался. А вот lfs же (так как у меня не было одного файла, мне нужно было сделать git lfs fetch --all) начал ругаться. Ок. Сделали хендшейк с хостом, вроде всё ок? Не, теперь он просит пароль при ssh подключении. Кайф
Но бесит даже не это. Но любопытно такой кайф только под виндой? Промт с паролем нельзя закрыть не убив процессы руками. Ну то есть git-lfs будто бы не знает концепт "сопроцессов". Так как ожидаешь поведение. ЛФС сопросцесс гит клиента, ssh клиенты сопроцессы lfs. Поэтому когда закрываешь гит, всё должно закрыться. Но нет. Оно всё равно открывает окно с паролем. Допустим вы знаете, что этот промт открывает процесс ssh. Но просто закрыть его нельзя, так как ssh клиент будет переподнят git lfs. Поэтому сначала убивается гит лфс, а потом ссх клиент. И даже логику транзакций так обработать не трудно, создав демона для этой задачи, если рассуждать что с "сопроцессами" что-то пойдёт не так. Все локи и прочее в гите — это текстовые файлы конфигурации. Ну сейчас нет никакой проблемы хоть перед опасными операциями делать полный бекап, а потом восстанавливать из него "демоном" если процесс закрылся как-то не так. Но незакрывающиеся окна — это раздражает.
Ладно, пойду что ли ремоут пока на https заменю, чтобы сделать то, что мне надо. Это вероятно сработает.
Git lfs часто и любопытно ломается. То какой-то файл найти не может, то что-то ещё. Особенно забавно он себя начинает вести с несколькими ремоутами. Так как там если у тебя локально нет какого-то файла, то запушить бывает целым приключением. За последние 2 месяца правил я какие-то проблемы уже дважды. Сейчас вот, так как у нас был переезд сервера гитлаба на новый, то как бы гит проблемы не увидел. Того, что это атака по середине и его ssh клиент почему-то не ругался. А вот lfs же (так как у меня не было одного файла, мне нужно было сделать git lfs fetch --all) начал ругаться. Ок. Сделали хендшейк с хостом, вроде всё ок? Не, теперь он просит пароль при ssh подключении. Кайф
Но бесит даже не это. Но любопытно такой кайф только под виндой? Промт с паролем нельзя закрыть не убив процессы руками. Ну то есть git-lfs будто бы не знает концепт "сопроцессов". Так как ожидаешь поведение. ЛФС сопросцесс гит клиента, ssh клиенты сопроцессы lfs. Поэтому когда закрываешь гит, всё должно закрыться. Но нет. Оно всё равно открывает окно с паролем. Допустим вы знаете, что этот промт открывает процесс ssh. Но просто закрыть его нельзя, так как ssh клиент будет переподнят git lfs. Поэтому сначала убивается гит лфс, а потом ссх клиент. И даже логику транзакций так обработать не трудно, создав демона для этой задачи, если рассуждать что с "сопроцессами" что-то пойдёт не так. Все локи и прочее в гите — это текстовые файлы конфигурации. Ну сейчас нет никакой проблемы хоть перед опасными операциями делать полный бекап, а потом восстанавливать из него "демоном" если процесс закрылся как-то не так. Но незакрывающиеся окна — это раздражает.
Ладно, пойду что ли ремоут пока на https заменю, чтобы сделать то, что мне надо. Это вероятно сработает.
❤1🤯1
Нейросети и скандалы
https://www.reddit.com/r/Art/comments/105o2dg/artistic_integrity_is_under_attack_me_digital_2023/
Скандалы с артом продолжаются. Раньше у нас художники защищались от нейроарта. А теперь их решение наносит ответный удар, но уже на реддите. Это отлично показывает почему нельзя "взять и забанить AI арт". Хотя любопытно то, что модератор посоветовал сменить стиль. Это довольно странно и грубо.
Как год заканчивался нейросетями, так как ChatGPT и Midjorney выглядят как магия, так он видимо и начнётся.
#новости
https://www.reddit.com/r/Art/comments/105o2dg/artistic_integrity_is_under_attack_me_digital_2023/
Скандалы с артом продолжаются. Раньше у нас художники защищались от нейроарта. А теперь их решение наносит ответный удар, но уже на реддите. Это отлично показывает почему нельзя "взять и забанить AI арт". Хотя любопытно то, что модератор посоветовал сменить стиль. Это довольно странно и грубо.
Как год заканчивался нейросетями, так как ChatGPT и Midjorney выглядят как магия, так он видимо и начнётся.
#новости
Reddit
From the Art community on Reddit: artistic integrity is under attack, me, digital, 2023
Posted by gr1imly - 153,132 votes and 94 comments
🤡2🔥1
Вопрос-ответ 3
Например, есть класс переключатель панелей юай. Где располагаешь скрипты в иерархии? Он бы находился на объекте канваса среди других компонентов, или на пустом отдельном объекте? Как ребенок канваса или как отдельный объект?
Скрины будут чуть ниже, так как ответ будет длинным. Тут важно понимать вот что. Я не люблю Code First подход. Вообще. Я считаю его неудобным. И дальше я объясню почему и схему организации используемую почти во всех проектах.
Менеджеры
Отвечая конкретно на на вопрос. Для меня класс переключатель экранов — это менеджер экранов. Я бы его обозвал каким-нить роутером, так как в будущем он может пригодится для функционала дип линок. Поэтому он лежал бы в [MANAGERS] из первого скриншота. Многие менеджеры — это монобехи, если им нужны Start, Awake или Update, которые лежат в отдельном объекте в сцене.
Я не люблю делать какой-то бусстрап скрипт или любую централизованную систему запуска приложения. Мне нравится когда по сути все "сервисы" или фичи имеют свой менеджер, свои реализации, свою инициализацию и т.п. И не запускаются из какой-то одной точки.
GUI
Интерфейсы же очевидно являются монобехами. Скрипты это обычно вроде UIPanel или типа того, которые управляют отрисовкой и вызывают методы или кидают события, которые реализует интерфейс. И тут хочется сделать важную ремарку. Я терпеть не могу в них Code First процесс. Особенно часто встречаемое AddListener на кнопки в гуе, вместо прокидывания через сериализацию Unity и вот почему.
Чем плох Code First? И зачем нужна такая организация?
Когда вы единственный разработчик системы, знаете свою систему и никому никогда не нужно её поддерживать. Пишите как чувствуете. А в остальных случаях давайте разберём такую вещь как расследование бага в неизвестной тебе фиче.
У вас баг, что по какой-то кнопке неверно что-то работает. Как проще всего локализовать проблему? Представим сложную панель и два случая. Баг причём визуальный и без логов, скажем вёрстка едет.
Случай первый. Кнопка подписана через сериализацию на то, что она запускает. Вы заходите в сцену. Проходите до того, чтобы инстанцировался нужный гуй. Находите кнопку и видите, что она вызывает.
Случай второй. У вас подписана в виджете в AddListener. Напоминаю, вы не знаете устройство системы. И допустим коллега, что её делал в отпуске или это легаси, и его уже нет в компании. Вы делаете тоже самое, смотрите все виджеты и скрипты в панели, пока не найдёте кнопку на которую будет подписка. И хорошо если по названиям нет дубликатов, чтобы не запутаться. Либо гадаете где она вызывается по IDE или логике названий. Либо самый длинный путь идти от точки входа подсистемы и разбираться где вызов именно этой кнопки.
Организация по "подпапкам" и т.п. выполняет ту же функцию. Как и строгие грамотные названия, организация ассетов. Всё нужно организовывать так, чтобы вам потом было удобно расследовать "что не так". И в целом разбираться в том, как работает проект. А благодаря редактору удобно это делать разрабатывая всё по схеме MVVM и используя все возможности визуального связывания с моделью.
Напоминаю, что интересующие вас вопросы можно задать тут.
#вопросы
Например, есть класс переключатель панелей юай. Где располагаешь скрипты в иерархии? Он бы находился на объекте канваса среди других компонентов, или на пустом отдельном объекте? Как ребенок канваса или как отдельный объект?
Скрины будут чуть ниже, так как ответ будет длинным. Тут важно понимать вот что. Я не люблю Code First подход. Вообще. Я считаю его неудобным. И дальше я объясню почему и схему организации используемую почти во всех проектах.
Менеджеры
Отвечая конкретно на на вопрос. Для меня класс переключатель экранов — это менеджер экранов. Я бы его обозвал каким-нить роутером, так как в будущем он может пригодится для функционала дип линок. Поэтому он лежал бы в [MANAGERS] из первого скриншота. Многие менеджеры — это монобехи, если им нужны Start, Awake или Update, которые лежат в отдельном объекте в сцене.
Я не люблю делать какой-то бусстрап скрипт или любую централизованную систему запуска приложения. Мне нравится когда по сути все "сервисы" или фичи имеют свой менеджер, свои реализации, свою инициализацию и т.п. И не запускаются из какой-то одной точки.
GUI
Интерфейсы же очевидно являются монобехами. Скрипты это обычно вроде UIPanel или типа того, которые управляют отрисовкой и вызывают методы или кидают события, которые реализует интерфейс. И тут хочется сделать важную ремарку. Я терпеть не могу в них Code First процесс. Особенно часто встречаемое AddListener на кнопки в гуе, вместо прокидывания через сериализацию Unity и вот почему.
Чем плох Code First? И зачем нужна такая организация?
Когда вы единственный разработчик системы, знаете свою систему и никому никогда не нужно её поддерживать. Пишите как чувствуете. А в остальных случаях давайте разберём такую вещь как расследование бага в неизвестной тебе фиче.
У вас баг, что по какой-то кнопке неверно что-то работает. Как проще всего локализовать проблему? Представим сложную панель и два случая. Баг причём визуальный и без логов, скажем вёрстка едет.
Случай первый. Кнопка подписана через сериализацию на то, что она запускает. Вы заходите в сцену. Проходите до того, чтобы инстанцировался нужный гуй. Находите кнопку и видите, что она вызывает.
Случай второй. У вас подписана в виджете в AddListener. Напоминаю, вы не знаете устройство системы. И допустим коллега, что её делал в отпуске или это легаси, и его уже нет в компании. Вы делаете тоже самое, смотрите все виджеты и скрипты в панели, пока не найдёте кнопку на которую будет подписка. И хорошо если по названиям нет дубликатов, чтобы не запутаться. Либо гадаете где она вызывается по IDE или логике названий. Либо самый длинный путь идти от точки входа подсистемы и разбираться где вызов именно этой кнопки.
Организация по "подпапкам" и т.п. выполняет ту же функцию. Как и строгие грамотные названия, организация ассетов. Всё нужно организовывать так, чтобы вам потом было удобно расследовать "что не так". И в целом разбираться в том, как работает проект. А благодаря редактору удобно это делать разрабатывая всё по схеме MVVM и используя все возможности визуального связывания с моделью.
Напоминаю, что интересующие вас вопросы можно задать тут.
#вопросы
Google Docs
Вопросы Григорию Дядиченко
Форма для вопросов в блог https://news.1rj.ru/str/+pP5hUX-sqVc1ZDgy. Задать вопрос можно в любой форме, проверять я буду раз в неделю. И периодически напоминать о существовании такой формы.
👍4😐4
Крутая инфа по левел-дизайну
Хочу порекомендовать блог своего приятеля.
Вася эксперт в игровой индустрии. Прошёл путь от тестировщика и PM до геймдизайнера и продюсера. Но основной его опыт и страсть - левел-дизайн. В его канале можно найти как инструменты для прототипирования игр и разбор дизайнерских решений, так и новости игр, приправленные авторскими инсайдами и замечаниями.
Самые интересные публикации он собрал в закрепе. Там даже есть его личный цикл по левел-дизайну, участвующий в конкурсе Технотекст 2022 на Хабр.
Все комментарии он читает и активно отвечает. Подпишитесь, передайте привет!
#реклама
Хочу порекомендовать блог своего приятеля.
Вася эксперт в игровой индустрии. Прошёл путь от тестировщика и PM до геймдизайнера и продюсера. Но основной его опыт и страсть - левел-дизайн. В его канале можно найти как инструменты для прототипирования игр и разбор дизайнерских решений, так и новости игр, приправленные авторскими инсайдами и замечаниями.
Самые интересные публикации он собрал в закрепе. Там даже есть его личный цикл по левел-дизайну, участвующий в конкурсе Технотекст 2022 на Хабр.
Все комментарии он читает и активно отвечает. Подпишитесь, передайте привет!
#реклама
👍7🔥1🗿1
Вооружимся архитектурой
#задачка
Итак, началась трудовая неделя. Сегодня у нас день холиварных тем. Утро началось с обсуждения подходов к архитектуре, так что самое время для архитектурной задачи :)
Вы решили сделать с друзьями свой скайрим. У вас пока в игре есть два вида оружия: молот и меч. Они отличаются уроном, прочностью и скоростью атаки. Плюс логикой атаки. Атака молота аое в круговой зоне. Атака меча бьёт до 3 ближайших противников. К вам пришёл катжит и за лунный сахар предложил купить у него схему архитектуры на картинке выше. Предложите решение лучше. В чём проблема данной схемы?
Решение теперь будет публиковаться на следующий день или позже, чтобы не спамить кучей сообщений. Тут решение не единственное верное. Но я распишу моё решение такой задачи с обоснованием. Так сказать условия чтобы размять свои архитектурные извилины.
#задачка
Итак, началась трудовая неделя. Сегодня у нас день холиварных тем. Утро началось с обсуждения подходов к архитектуре, так что самое время для архитектурной задачи :)
Вы решили сделать с друзьями свой скайрим. У вас пока в игре есть два вида оружия: молот и меч. Они отличаются уроном, прочностью и скоростью атаки. Плюс логикой атаки. Атака молота аое в круговой зоне. Атака меча бьёт до 3 ближайших противников. К вам пришёл катжит и за лунный сахар предложил купить у него схему архитектуры на картинке выше. Предложите решение лучше. В чём проблема данной схемы?
Решение теперь будет публиковаться на следующий день или позже, чтобы не спамить кучей сообщений. Тут решение не единственное верное. Но я распишу моё решение такой задачи с обоснованием. Так сказать условия чтобы размять свои архитектурные извилины.
👍4