Media is too big
VIEW IN TELEGRAM
Реф, по которому буду пилить первый проект пыточной. Меня пощадили с задачей (у остальных всё ИМХО сложнее). Дизайн можно менять, но не сильно отходить от исходных механик.
Пока ставится версия юньки, в которой надо работать, я прикидываю, что и как буду делать.
Очевидно проект 2D. По сути, это гибрид двух игр: zuma-подобной и головоломки с авто на парковке, которые мешают друг другу выехать.
Сразу же тут напрашивается применение сплайнов - кривых, вдоль которых будет уверенно топать толпа. Ещё я подумываю впихнуть все уровни в одну сцену. Ну, держать префабы с заранее выставленными на парковке тачками в ресурсах и подтягивать оттуда. Так же и с маршрутами. А данные о количестве цветов подтягивать из констант согласно выбранного уровня. Ну, мне так кажется.
Такую игруху можно зафигачить быстро, но если красиво оформлять, подключать плагин, следить за чистотой кода, то для моего уровня разработки где-то месяца 1,5-2. И увеличим это время на всякий случай раз так в 5 )
Пока ставится версия юньки, в которой надо работать, я прикидываю, что и как буду делать.
Очевидно проект 2D. По сути, это гибрид двух игр: zuma-подобной и головоломки с авто на парковке, которые мешают друг другу выехать.
Сразу же тут напрашивается применение сплайнов - кривых, вдоль которых будет уверенно топать толпа. Ещё я подумываю впихнуть все уровни в одну сцену. Ну, держать префабы с заранее выставленными на парковке тачками в ресурсах и подтягивать оттуда. Так же и с маршрутами. А данные о количестве цветов подтягивать из констант согласно выбранного уровня. Ну, мне так кажется.
Такую игруху можно зафигачить быстро, но если красиво оформлять, подключать плагин, следить за чистотой кода, то для моего уровня разработки где-то месяца 1,5-2. И увеличим это время на всякий случай раз так в 5 )
🔥6😁1🤯1
Media is too big
VIEW IN TELEGRAM
Решил начать с самого вкусного в задании
Во-первых, я понял, почему в рефе шейдер с обводкой: на поворотах надо менять порядок смайликов и это без шейдера смотрится коряво.
Во-вторых, я подумываю вместо смайлов сделать фрукты. И название Angry Fruits очень подходит, и разнообразие будет вплоть до экзотических фруктов.
В-третьих, сделал пул, но пока он не выполняет свою функцию, т.к. в последовательности пока ещё нет повторений и сейчас нечем атаковать, чтобы вернуть в пул.
В-четвёртых, уже надо немного рефакторить. Я зачем-то сделал расширенную настройку по количеству линий врагов, боевому порядку, отступу друг от друга. А с другой стороны, пусть пока будет.
Во-первых, я понял, почему в рефе шейдер с обводкой: на поворотах надо менять порядок смайликов и это без шейдера смотрится коряво.
Во-вторых, я подумываю вместо смайлов сделать фрукты. И название Angry Fruits очень подходит, и разнообразие будет вплоть до экзотических фруктов.
В-третьих, сделал пул, но пока он не выполняет свою функцию, т.к. в последовательности пока ещё нет повторений и сейчас нечем атаковать, чтобы вернуть в пул.
В-четвёртых, уже надо немного рефакторить. Я зачем-то сделал расширенную настройку по количеству линий врагов, боевому порядку, отступу друг от друга. А с другой стороны, пусть пока будет.
❤4👍4🔥3
Всем привет! Сейчас в пути, а значит по традиции без фото и видео.
Выше уже есть видео со спавном врагов. Теперь я сделал более гибкую систему настройки. Теперь можно включить флаг, который будет запускать разные типы врагов в случайной последовательности, что подойдёт для обычных уровней. Цвета тоже задаются случайным образом, но чтобы не плодить кучу префабов врагов, авто и пушек, пришлось кардинально пересмотреть логику.
Мне надо сделать врагов в 3d, перекрашивать материал, а поверх накладывать текстуру злых лиц. Так я впервые сделал свой кастомный шейдер.
Вот ещё какие мысли сейчас кручу в голове: количество врагов на уровне должно совпадать с количеством боеприпасов (в разных размерах авто их разное количество). А значит надо будет в редакторе юнити сделать класс, который будет брать уровень, считать врагов по каждому типу, затем брать авто и считать боеприпасы. Если в каком-то уровне будет их несоответствие, выводить в консоль, чего и сколько не хватает.
Ну и при построении уровня я хочу визуализировать, какие типы авто где стоят, поэтому будет кнопка, которая рандомно их перекрасит.
Наверно это сложно читать, но на самом деле пока всё просто, было бы время это делать )
Выше уже есть видео со спавном врагов. Теперь я сделал более гибкую систему настройки. Теперь можно включить флаг, который будет запускать разные типы врагов в случайной последовательности, что подойдёт для обычных уровней. Цвета тоже задаются случайным образом, но чтобы не плодить кучу префабов врагов, авто и пушек, пришлось кардинально пересмотреть логику.
Мне надо сделать врагов в 3d, перекрашивать материал, а поверх накладывать текстуру злых лиц. Так я впервые сделал свой кастомный шейдер.
Вот ещё какие мысли сейчас кручу в голове: количество врагов на уровне должно совпадать с количеством боеприпасов (в разных размерах авто их разное количество). А значит надо будет в редакторе юнити сделать класс, который будет брать уровень, считать врагов по каждому типу, затем брать авто и считать боеприпасы. Если в каком-то уровне будет их несоответствие, выводить в консоль, чего и сколько не хватает.
Ну и при построении уровня я хочу визуализировать, какие типы авто где стоят, поэтому будет кнопка, которая рандомно их перекрасит.
Наверно это сложно читать, но на самом деле пока всё просто, было бы время это делать )
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
А вот и шейдер. Цвет материала настраивается отдельно, текстура отдельно 😎
Шейдер выглядит так:
Шейдер выглядит так:
Shader "Custom/AlphaChannelMask" {
Properties {
_MainTex ("Texture (RGB) + Mask (A)", 2D) = "white" {}
_BackgroundColor ("Background Color", Color) = (0,0,1,1)
}
SubShader {
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
fixed4 _BackgroundColor;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 texData = tex2D(_MainTex, IN.uv_MainTex);
fixed3 color = texData.rgb;
fixed mask = texData.a;
o.Albedo = lerp(_BackgroundColor.rgb, color, mask);
o.Alpha = 1.0;
}
ENDCG
}
}🔥5❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет! Уже немного сделано. Дальше в планах:
1. Подумываю сделать запуск автомобилей свайпом.
2. Надо сделать, чтобы враги откатывались, когда в середине образуется пустота (это самое интересная и единственная непродуманная мной задача на данный момент).
3. Анимации стрельбы, езды и партиклы попаданий. Подозреваю, это преобразит игру.
А ещё я сделал одну штуку, которая поможет мне не накосячить при создании кучи уровней. Продемонстрирую, когда начну собирать уровни 🙂
1. Подумываю сделать запуск автомобилей свайпом.
2. Надо сделать, чтобы враги откатывались, когда в середине образуется пустота (это самое интересная и единственная непродуманная мной задача на данный момент).
3. Анимации стрельбы, езды и партиклы попаданий. Подозреваю, это преобразит игру.
А ещё я сделал одну штуку, которая поможет мне не накосячить при создании кучи уровней. Продемонстрирую, когда начну собирать уровни 🙂
🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Хватит с меня кодинга на сегодня. Половину дня придумывал систему для отката врагов вверх по сплайну, уже доходило до 280 строк запутанного кода. И что в итоге? Снёс всё нафиг, при спавне стал записывать расстояние от нового врага до старого и тупо откатывать, если это расстояние изменилось, когда часть врагов уничтожена и удалена из списка. Получилось пока рвано и под вечер поймал ещё один баг. Но думаю, завтра исправлю это. Уже не терпится перейти к свайпу авто. Там тоже будет не всё так радужно, конечно, ведь это свайпы, резервирование мест, проверка, что нет препятствий, маршрут в объезд в сторону слотов для пушек и вообще к конкретному слоту. Короче, будет полная жо весело.
🔥7
Сорян, что потерялся. Всё свободное время пока съедает работа, которая не относится к программированию. К тому же заболел, мозг отказывается шевелить извилинами ввиду плохого самочувствия. Но это не помешало мне немного посмотреть видосов про различные паттерны типа Command, EventBus, задуматься о применении в своих проектах UniRX и Zenject. Разобрался, как работает паттерн стратегия и даже воткнул это в текущий проект. Короче, я делаю всё, кроме того, чтобы сдвинуть разработку с мёртвой точки. Как приду в себя и разгружусь по работе, планирую продолжить с новыми силами.
👍4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Очень много времени ушло на сплайн дороги с помощью SplineContainer.
1. Меш дороги "из коробки" не заменялся (а мне надо было подсунуть меш с коллайдером). Другой способ делал с наложением мешей друг на друга (и коллайдеры тоже бы накладывались), причём всё это добро смотрелось ужасно.
2. Нашёл дополнение к сплайну от одного разраба. Это решило проблему меша и коллайдеров, но при создании префаба меш слетал. Исправил это, вмешавшись в ассет.
3. Юньковский сплайнконтейнер по ходу не хранит узлы соединений между сплайнами. Пришлось сделать собственную карту узлов и систему поиска путей.
4. Долго заморачивался с получением позиции на сплайне и движением в нужном направлении. Вроде решил.
5. Добавил слерп на повороты и лерп на перемещение. Стало чуть получше.
6. В процессе решения всех этих задач несколько раз прибегал к помощи нейронок и те всё благополучно ломали )
Сейчас надо бы разложить классы по папкам, закоммитить и запушить сделанное. Далее пойду в блендер переделывать модельки.
1. Меш дороги "из коробки" не заменялся (а мне надо было подсунуть меш с коллайдером). Другой способ делал с наложением мешей друг на друга (и коллайдеры тоже бы накладывались), причём всё это добро смотрелось ужасно.
2. Нашёл дополнение к сплайну от одного разраба. Это решило проблему меша и коллайдеров, но при создании префаба меш слетал. Исправил это, вмешавшись в ассет.
3. Юньковский сплайнконтейнер по ходу не хранит узлы соединений между сплайнами. Пришлось сделать собственную карту узлов и систему поиска путей.
4. Долго заморачивался с получением позиции на сплайне и движением в нужном направлении. Вроде решил.
5. Добавил слерп на повороты и лерп на перемещение. Стало чуть получше.
6. В процессе решения всех этих задач несколько раз прибегал к помощи нейронок и те всё благополучно ломали )
Сейчас надо бы разложить классы по папкам, закоммитить и запушить сделанное. Далее пойду в блендер переделывать модельки.
🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
А, ну и столкновения авто друг с другом.
По свайпу создаётся мувер, который двигает авто вперёд или назад. Если есть столкновение, мувер заменяется на тот, что откатывает авто немного в противоположную сторону. А при детекции коллайдера сплайна мувер заменяется на тот, что тащит по сплайну. Все они под одним интерфейсом, управляемые публичным методом Move(float deltaDistance).
По свайпу создаётся мувер, который двигает авто вперёд или назад. Если есть столкновение, мувер заменяется на тот, что откатывает авто немного в противоположную сторону. А при детекции коллайдера сплайна мувер заменяется на тот, что тащит по сплайну. Все они под одним интерфейсом, управляемые публичным методом Move(float deltaDistance).
🔥8
Я 3 дня провозился, чтобы перевести проект на Zenject. В итоге либо я хреново выстроил архитектуру проекта (что более вероятно), либо zenject мне не очень подходит.
Зачем мне нужен был Zenject. В какой-то момент мне пришлось вручную прокидывать зависимости через классы, которым это нафиг не надо. Они тупо передавали ссылку дальше. Объясню проще с помощью примера из сказки про смерть кощея, которая в игле, игла в яйце, яйцо в утке, утка в зайце и т.д. Так вот, ссылка прокидывалась через все эти сущности, потому что это надо игле. Как раз такую задачу и должен решать DI Container, в моём случае zenject. А когда таких ответственностей много, конструкторы распухают.
Но, оказалось, что в рантайме внедрять зависимости посложнее и надо создавать объекты через фабрики, а сервисы регистрировать в инсталлере. И я чёт запутался, решил отказаться от zenject и сделать более плоские модели. Условно теперь зайцу не надо создавать утку, а утке яйцо, яйцу иглу. Отдельно создаём иглу, затем яйцо и прокидываем туда иглу, отдельно создаём утку и прокидываем в неё яйцо и т.д.
Не уверен, что теперь всё правильно, но посмотрю, как всё будет работать
Зачем мне нужен был Zenject. В какой-то момент мне пришлось вручную прокидывать зависимости через классы, которым это нафиг не надо. Они тупо передавали ссылку дальше. Объясню проще с помощью примера из сказки про смерть кощея, которая в игле, игла в яйце, яйцо в утке, утка в зайце и т.д. Так вот, ссылка прокидывалась через все эти сущности, потому что это надо игле. Как раз такую задачу и должен решать DI Container, в моём случае zenject. А когда таких ответственностей много, конструкторы распухают.
Но, оказалось, что в рантайме внедрять зависимости посложнее и надо создавать объекты через фабрики, а сервисы регистрировать в инсталлере. И я чёт запутался, решил отказаться от zenject и сделать более плоские модели. Условно теперь зайцу не надо создавать утку, а утке яйцо, яйцу иглу. Отдельно создаём иглу, затем яйцо и прокидываем туда иглу, отдельно создаём утку и прокидываем в неё яйцо и т.д.
Не уверен, что теперь всё правильно, но посмотрю, как всё будет работать
👍3🔥1🤯1
Сделал прототип без Zenject и предложил нейросетке сравнить, как было бы с этим фреймворком и без него в моём проекте. Вердикт на скринах.
Что меня не устроило:
1. Zenject забирает у меня контроль и ориентироваться в логике становится сложнее.
2. Надо инстантиировать объекты специальным образом.
3. Надо помечать конструкторы командой [Zeject]
4. Кода в 2,5 раза больше, чем без Zenject.
Наверно в больших проектах он действительно сослужит большую службу, но на данном этапе я пожалуй обойдусь как-нибудь без него.
А какой у вас опыт с Zenject? Используете в своих проектах?
Что меня не устроило:
1. Zenject забирает у меня контроль и ориентироваться в логике становится сложнее.
2. Надо инстантиировать объекты специальным образом.
3. Надо помечать конструкторы командой [Zeject]
4. Кода в 2,5 раза больше, чем без Zenject.
Наверно в больших проектах он действительно сослужит большую службу, но на данном этапе я пожалуй обойдусь как-нибудь без него.
А какой у вас опыт с Zenject? Используете в своих проектах?
Media is too big
VIEW IN TELEGRAM
Всем привет! Продолжаю разработку проекта по учёбе.
Что сделано с последней публикации:
- нарисовал модельки авто (да, сам);
- заменил спрайты постаментов на 3d;
- добавил движение авто по сплайнам с переключением стратегий (движение назад, вперёд, откат после аварии, разворот на сплайне, корректное движение к целевой позиции с поиском кратчайшего пути);
- добавил анимации столкновений;
- научил разъярённую толпу бояться, менять выражение лица при попадании;
- понакидывал партиклы.
Больше всего было потрачено времени:
1. На постройку карты графов, исправление багов при поиске путей и направлений авто при движении. В этом реально чуть не утонул, но справился.
2. На рефакторинг кода, многое перепилил и сделал удобнее.
Что интересного по коду:
✅ По-моему у меня пока на весь проект нет ни одного метода Update(), использую UniRX и уже для меня родные корутины, в остальном многое на событиях и управляется сервисами.
✅ продолжение в сообщениях 👇
Что сделано с последней публикации:
- нарисовал модельки авто (да, сам);
- заменил спрайты постаментов на 3d;
- добавил движение авто по сплайнам с переключением стратегий (движение назад, вперёд, откат после аварии, разворот на сплайне, корректное движение к целевой позиции с поиском кратчайшего пути);
- добавил анимации столкновений;
- научил разъярённую толпу бояться, менять выражение лица при попадании;
- понакидывал партиклы.
Больше всего было потрачено времени:
1. На постройку карты графов, исправление багов при поиске путей и направлений авто при движении. В этом реально чуть не утонул, но справился.
2. На рефакторинг кода, многое перепилил и сделал удобнее.
Что интересного по коду:
✅ По-моему у меня пока на весь проект нет ни одного метода Update(), использую UniRX и уже для меня родные корутины, в остальном многое на событиях и управляется сервисами.
✅ продолжение в сообщениях 👇
🔥6👏1
TyapLyapDev - Разработка игр | Движуха Сакутина
Реф, по которому буду пилить первый проект пыточной. Меня пощадили с задачей (у остальных всё ИМХО сложнее). Дизайн можно менять, но не сильно отходить от исходных механик. Пока ставится версия юньки, в которой надо работать, я прикидываю, что и как буду…
Помните, я говорил, что надо 1,5-2 месяца. Так вот, через неделю будет как раз 2 месяца разработки. Но осталось сделать по фигне (правда, всё оставшееся невкусное, кроме работы с sfx). Но, я не учёл, что надо наклепать уровней штук 100, а так же будет непросто пройти код ревью, ибо наговнокодил ввиду слабеньких знаний.
В любом случае через неделю покажу, что накалякал и что выполнено из этого списка 🙂
В любом случае через неделю покажу, что накалякал и что выполнено из этого списка 🙂
🔥3😁1👨💻1
Сегодня 57-й день разработки. Звук почему-то не записался, там есть только тестовая музыка. Конечно, в 2 месяца не уложусь, если учитывать все задачи, а не только те, что в списке. Зато прогресс попёр и довольно много сделано. Как вам? Фигня, да? 😁
👍2😁1
TyapLyapDev - Разработка игр | Движуха Сакутина
Photo
По мере того, как я закрывал одни задачи, нарисовывались новые. И всё же я потихоньку подбираюсь к завершению проекта. Правда, моих знаний всё же недостаточно, чтобы сделать максимально чистую архитектуру. В проекте куча костылей, с которыми ментор просто не примет работу. Но я решил, что пока сделаю хоть как-нибудь, а затем буду исправлять под руководством своего ментора. В комментариях скину ссылку на черновик, если кому интересно потрогать недопиленную игру
🔥8👍1