MrMSE

дискорд-сервер помощи с Unity c#: https://discord.gg/ZYNXnfeEfX
На Пикабу
поставил 48 плюсов и 92 минуса
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабу
1327 рейтинг 15 подписчиков 1 подписка 8 постов 3 в горячем

Игра по заявкам. Фан-проект. Open Source

Доброго времечка.

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

Игра по заявкам. Фан-проект. Open Source Gamedev, Челлендж, Indiedev, Unity3D, Гифка, Длиннопост

Картинка в основном для привлечения внимания


Для всех желающих поучаствовать в разработке я выложу проект на гитхаб и добавлю всех, кто захочет присоединиться. Оставляю за собой право принятия мерж-реквеста. Проект буду делать на юнитях + шарп :) Была мысль мутить на гэйммейкере2, но не уверен, что смогу оперативно решать там вопросы, поэтому лучше там где мне покомфортней.

Игра по заявкам. Фан-проект. Open Source Gamedev, Челлендж, Indiedev, Unity3D, Гифка, Длиннопост

Безусловно для продуктивной работы необходимы правила:

Под каждым постом любой желающий может написать, что бы он хотел добавить в игру.

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

Сразу оговорюсь насчет ограничений:

1)Идея должна быть реально выполнима.

2)Идея может быть реализована за вменяемые сроки.

3)Никаких сетевых взаимодействий (чистый сингл).

4)Никаких закидонов по графонию, чтоб я не сошел с ума это всё рисовать (в идеале графоний как на картинке, но можно в другом сеттинге, чтоб я мог запилить также за день).

5)Никаких честных 3д с вращающейся камерой и открытым миром. Камера фиксирована в одном положении.

6)Оставляю за собой право уточнить у автора-победителя идею (возможно урезать до приемлемых сроков, если дофига многа буит).

Игра по заявкам. Фан-проект. Open Source Gamedev, Челлендж, Indiedev, Unity3D, Гифка, Длиннопост

Не могу утверждать, что я доведу проект до стима ) Но какую-то играбельную версию планирую сделать (если конечно, будет активность).


В общем все, кто хотел покомандовать разработкой - прошу в комментарии. Вы получите возможность реализовать свою задумку, не впихиваясь в разработку, а я - своровать ваши гениальные идеи :D Если вдруг есть кто-то кто хочет поучаствовать в такой шизе в качестве гребца - вливайтесь. Если появится необходимость я подготовлю и опубликую на гите правила и буду оформлять таски. Кто хочет похейтить - вот прекрасный повод :D Заодно будет понятно есть ли у этой идеи вообще шансы на существование.


З.ы. под этим постом ищется первая идея. Это может быть и "обчомигра" и "жанр" и какие-то конкретные механики, пишите, что бы вам лично хотелось видеть в игре, в которую хочется поиграть (но старайтесь ужаться в ограничения, пожалуйста).

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

Хранение и использование игровых данных

Суть

В любой программе мы так или иначе вынуждены хранить информацию, которая будет известна на момент запуска. Например: система диалогов и игре, либо параметры для генерации персонажа, уровня ещё чего-нибудь. Некоторые вещи можно сунуть в монобех и хранить в префабе (урон, скорость, коллайдер, системы объекта). Однако в классах храняться, в основном те вещи, которые не будут подвержены частым изменениям. Т.е. мы единожды настроили свойства игрока - и больше туда не суёмся, пока не заведутся новые механики. Но как быть с параметрами, которые напрямую зависят от гейм дизайна? Скилы, сложность уровня, диалоги, параметры генерации/спавна врагов и т.п. Вещи, которые используют ровно одну и туже механику, но отличаются своими свойствами. Есть вариант рассовать это в префабы и делать для каждой штуки свой префаб. Это имеет право на жизнь и в принципе даже будет работать, правда не очень удобно, когда проект разрастётся, но можно.

Шоделадь?

Велосипед уже придуман, даже не один. Это называют "справочниками" (descriptions) и в том или ином виде исповедуют ровно один подход: блок (совокупность блоков) параметров, на основании которых работает логика упаковывается в отдельный файл. Самый логичный (следствие из названия) способ - использовать json или аналогичный формат данных, где текст будет разбит на блоки и при парсинге файла выковыриваться для использования. У этого есть один неприятный минус: наглядность (вернее ненаглядность :D ). Чтобы с этим работать - надо иметь определённый опыт. Держать в голове простыни текста - занятие не для всех. Плюс всё в жисонке это текст, поэтому есть возможность поломать всё, что хочешь... если руки из жопки

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

Альтернатива

В юнити есть сервисный класс ScriptableObject. Который позволяет создавать объекты, заполняемые в инспекторе и использовать их в качестве мини баз данных. Туда можно поместить почти всё, что угодно. Все стандартные типы и кастомные классы могут быть использованы в качестве полей. Более того, как и любой класс, SOшка может реализовывать логику внутри себя, что позволяет реализовать гибкость проекта и легкость его расширения.

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

Как это работает

Всё начинается с написания класса SO, который является шаблоном для наших объектов, которые мы сможем использовать, как душе угодно. Класс должен быть отнаследован от ScriptableObject и иметь поля, которые мы хотим заполнять. Например - для хранения всего текста в проекте. Реализация выше предоставит нам возможность создать объект текстового поля:

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

по порядку: CreateAssetMenu необходим для создания экземпляра этого класса в проекте (тупо создать объект, куда вписать текст)

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

а внутри только поля, которые хочется использовать, как на примере:
энам для определения языка текста (не он определяет язык внутри написания, а пользователь обозначает каким языком написан текст)

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

публичный стринг для основного текста

и ещё один для дополнительного текста, который можно использовать при доп условиях

Как я говорил в начале - SOшка позволяет реализовывать логику внутри себя, поэтому ничто не мешает, например, присовокупить дополнительный текст к основному или ещё как-то модифицировать поля, в зависимости от потребности системы, например так:

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

Таким образом можно заложить основу для переводов: создавать для каждого языка в системе соответствующие текстовые поля, которые будут различаться только энамом принадлежности к языку и непосредственно текстом. А для использования этого всего - написать ещё один SO, которые будет хранить для нас версии для всех языков:

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

в нем же можно, например, хранить и следующий диалог (или несколько и выбирать в зависимости от условий)

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

например так. Скажем где-то в системе мы храним текущее состояние нашей игры (которое зависит от совершаемых выборов). Для простоты я обозначил это целым числом, но по факту это может быть сложная структура данных, которая хранит в себе все выборы, который делал игрок за всё время проходжения игры. И на основании этого состояния определяем который из диалогов передать в систему. Список диалогов мы определяем сами, складывая в массив в инспекторе (в данном примере позиция в массиве завязана на состояние, но ничто не мешает нам ввести ещё один энам, например такой:

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

внести его в сам хэндлер и определять какой именно стейт в нем обозначен текстом. Немного меняем код, чтобы метод возвращал нам именно тет объект, который будет соответствовать текущему состоянию прогресса:

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

Вот в общем-то и всё. Осталось только вывести этот текст в поле UI и радоваться.

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

пишем новый монобех, накидываем на нужный элемент канваса, добавляем кнопки, связываем кнопки с нашим монобехом через onClic() в который пропихиваем нужный метод

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

а вот и публичный метод, который прокидываем в onClick. Он появится там сам (там будут все публичные методы для этого объекта). Можно было сразу на метод отрисовки текста дать ссылку, но вдруг мы захотим делать ещё какие-то вещи или (что вероятнее) захотим отрисовывать диалог не только по этому событию.

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

собственно всё.

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


З.ы. этим же инструментарием можно пользоваться для хранения информации генераторов. Например создавать экземпляр врага, навешивая на него только те модули логики, которые ему нужны.

Например SOшка генерации уровня из моей прошлой темы:

Хранение и использование игровых данных Unity, Gamedev, Архитектура по, Видео, Длиннопост

номер уровня, позиция игрока, начальной платформы, позиция для рождения скила. Тип скила, который я хочу на этот уровень закинуть. Лист объектов, из которых будет собран уровнеь. И количество частей из которого будет состоять уровень. Соответственно можно сделать новый уровень просто перетасовав значения в SO.

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

Сперва добейся челенж

Я тут начал советовать советы всякие и мне резонно заметили, чтоб я сперва сам чото сделал, прежде чем умничать. К сожалению в будни было много работы и особо сил не было заниматься этим. Так минут по 20-30, поглядывая ютубчик и поигрывая в шахматы. В субботу сдохла винда :D поэтому рабочее настроение благополучно не появилось. В общем, на всё про всё часов 7-8 работы (пополам с ютубом и шахматами) и получился прототип платформера

Что есть: генерация уровней, скилы движения и их смена, и то и другое расширяемо, можно нагенерить любых уровней, каких душе угодно, путём добавления префабов новых платформ. Добавление скилов тоже достаточно просто, нужно только дописать логику для конкретного скила. Заложен фундамент под управление платформамии (например: замедление времени, особые скилы для конкретных платформ (нужно дописать только логику конкретной платформы)).

Счет, жизни и юайку не прикручивал, потому что поленился. Да и не такая это сложная задача, к тому же больше имеет отношение к балансу, а не к разработке. Точно так же и про графику. Сунуть вместо куба персонажа и крутить ему анимацию особого труда не составит.

Управление сейчас: "D" - движение, "W" - смена скила (белый квадратик со стрелкой на видосах это скил движения вперёд. Есть ещё кувырок и прыжок ).

При падении уровень перегенеривается с помощью справочной информации из соответствующего объекта. в проекте. В которой можно указать кол-во платформ для генерации уровня, какие именно платформы будут использоваться при генерации. Их веса сейчас захардкожены (первый в листе используется чаще и по ниспадающей), но нет никаких проблем вынести развесовку в конфигурационный файл. При достижении зелёной стрелочки геймконтроллер повышает уровень сложности и ищет в списке конфигурационных файлов соответствующий текущей сложности, с помощью которого генерит новый уровень. В принципе и скилы движения можно вынести в точно такой же конфигурационный файл, но в данном случае хотелось добавить разнообразие решений. Таким методом можно, в том числе, реализовать телепорт. Да и всё что хочешь. Логике всё равно, что будет делать скилл :)


гит проекта для тех, кто хочет посмотреть как это вообще "проект игры на юнити, я никагда нивидил": https://github.com/MrMouseSE/Platformer

билд погонять с 9ю уровнями (после 9ого сброс на 1ый): https://github.com/MrMouseSE/Platformer/blob/main/build.zip

з.ы. баланса нет, можно заспамить кнопку движения и летать ^_^

Собственно, к чему я это всё?

Сперва добейся челенж Unity3D, Обучение, Компьютерная помощь, Gamedev, Видео, Мат, Длиннопост

Посмотрев на последние посты пикабушников в группе я в несколько шоковом состоянии, если честно. Люди тратят просто безумное количество времени и сил, реализовывая свои хотелки, зачастую вопреки здравому смыслу и логике. Стандартная ошибка начинающего: "ввязаться в бой, а там видно будет" и непонимание "у кого и что спросить" толкает людей к совершенно необдуманным поступкам. В итоге труд, который тратится на создание тривиальных вещей просто поражает воображение. Вполне допускаю, что для этих людей важен ПУТЬ, а не достижение цели, но (вроде бы) декларируют они конкретные вещи (а не бесконечные прогулки по граблям).

Я честно не понимаю в чем проблема, по моему мнению - учебного материала просто невероятное количество на сегодняшний день. Возможно как раз в этом и проблема для кого-то (не знает с чего начать). Возможно проблема в незнании как поставить вопрос. Возможно, что причина - нехватка компетентного специалиста под боком, у которого можно получить консультацию. У каждого могут быть свои причины. Вполне допускаю, что кому-то не заходят форматы видеообучающих материалов и ЖИВОГО ФИДБЕКА, когда можно задать вопрос непосредственно по своей реализации и получить конкретный ответ, а не пример на "кубиках".

Так вот:

Я предлагаю всем желающим менторство по всем базовым вопросам, типа "с чего начать делать такое", "как мне сделать вот это" и т.п. Но только конкретным вопросам, а не всякое пространное "хочу сделать заебись нихуя не делая".

В чем я могу помочь:
-инструментарий Unity
-моделлирование
-эффекты
-шейдера
-программирование (клиент/эдитор)

-архитектура проекта (программная на базовом уровне, чтоб можно было расширяться, структура ассетов)

Имеется коммерческий опыт во всём этом (тех.худ 6 лет, моделлер 4 года. Мобилы, Юнити)
-с рисованием могу подсказать инструментарий :D

не ко мне:

-клиент-серверное программирование

-баланс

-маркетинг

В общем - чисто технические вопросы по клиентской разработке.

Зачем это мне:

Я просто очень хороший человек У меня есть чисто шкурный интерес. По роду деятельности мне приходится обучать новеньких и смежников из отрасли всяким азам (и не очень азам) профессии, поэтому всё больше становится необходим именно такой опыт "как обучать людей".

Какой формат:

Самый удобный для меня формат - менторство. Т.е. консультация по какой-то конкретике. Например: формальное описание задания (дизайн документ в любом виде, даже в зачатачном, главное, чтоб не на словах, типа "ну тут вот это туда, а это сюда, но я не знаю, не думал, ваще вот"), либо ревью проекта ну или его зачатков. Для связи и передачи взад-назад файликов можно использовать дискорд (как-никак у нас тренд на удалённое обучение :D ).

Прозрачность:

В качестве доп стимула и большей открытости и пользы для сообщества - буду постить раз в какой-то промежуток времени развернутый отчет о проделанной работе и прогрессе, который получился в результате сотрудничества (с позволения автора), ну либо сам автор пусть постит, собирает плюсцы ^_^


Ну и чтобы всё это не сочли за рекламу - все контакты для связи в комментах, если будет заинтересованность. Ну или топите пост, если никому не интересно. В конце концов: изобретать велосипед - это народная забава разработчиков!

Сперва добейся челенж Unity3D, Обучение, Компьютерная помощь, Gamedev, Видео, Мат, Длиннопост
Показать полностью 2 3

Ответ на пост «Пост о том, как я сделал уникальную книгу-игру за 15000$ и не отбил ни гроша»

Хороший пост о том, как не надо делать что бы то ни было на свете (не только разрабатывать игры). Простые шаги, которые из этого поста можно вычленить:
1. Ты делаешь коммерческий продукт?
- да: необходимо вычленить ЦА, провести тестирование по концепту (хотя бы даже на картинки и хотя бы даже на бесплатных площадках) и по фидбеку уже было бы ясно какая графика продукту нужна и так со всеми аспектами.
- нет: тогда зачем "и на андроид тоже", 3 языка, "все истории, которые есть про мюнхаузена" и куча подобного.

2. Если ты делаешь продукт на аудиторию, а автор это декларирует прямо в названии поста - ты обязан проводить промежуточные тесты, благо щас миллион возможностей для этого: посты в тематических сообществах, группа игры, публикации WIP и уже на уровне первых концептов получить фидбек.

3. Вкинуть в кого-то бабло без понимания первых двух пунктов = выкинуть бабло в окно. Для того чтобы сделать простейшую линейную сцену - не нужен программист, нужно потратить пару вечеров на изучение какого-нить инструмента нодального программирования и всё. Иллюстрации от "заслуженного художника" != интересные иллюстрации. Игры - продукт массового потребления. Массовое потребление имеет вполне четкие сформулированные тенденции, которые присущи именно современной ситуации. Игра - это продукт на широкую аудиторию здесь и сейчас, а не "когда-то потом".

4. Игра = геймплей! Не графика, не звук, ни что бы то ни было ещё. Игра = геймплей. Нет геймплея = нет игры. А теперь внимание вопрос: аудиокнига... с картинками???? Срсли? Автор просто взял и уничтожил геймплей юайкой (интерфейсом взаимодействия пользователя). Это прям шок-контент какой-то. Т.е. у нас есть визуал, который рассказывает историю, аудиоряд, который рассказывает историю, воображение пользователя, которое визуализирует историю (и борется с визуалом, который показывает приложуха) и которое рассказывает историю по картинке (и борется с аудиорядом приложения). Это 10 из 10. Прям инструкция, как сделать проект максимально непригодным для пользователя!

Ответ на пост «Пост о том, как я сделал уникальную книгу-игру за 15000$ и не отбил ни гроша» Реальная история из жизни, Личный опыт, Gamedev, Истории из жизни, Деньги, Ответ на пост

з.ы. я понимаю, что тут тематическое сообщество людей интересующихся темой, а не профессионалов. Но блин, серьезно чуваки, щас инфы хоть жопой жуй, это же на поверхности всё. На дворе не 2000 год, когда приходилось идти по граблям и все хотели сделать "свой движок и свою мморпг", когда интернет был "по талонам" и никто не знал даже что искать. Сегодня миллионы часов обучающих видео от производителей движков, по всем областям геймдева.

з.ы.ы. У меня только один вопрос, люди, которые восхищаются таким поведением - как бы вы отреагировали, если бы вам остановку общественного транспорта такой деятель смастерил, установив скамейки на крышу, крышу на высоту 100 см, а подняться на неё можно было бы только по верёвочной лестнице?

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

Эффект силового поля (шейдер)

Небольшая практика в эффектиках и шейдерах под Unity. Хотелось мне сделать эффект силового поля, в которое попадают что-либо и провоцирует световое пятно, растекающееся по поверхности. Сказано - сделано :)

Эффект силового поля (шейдер) Шейдеры, Unity3D, VFX, Gamedev, Гифка, Длиннопост, Силовое поле

Немношко матана для любителей: сфера - это обычный меш, эффектом френеля симулируем "энергетическое" поле, с прозрачностью в зависимости от взаимного направления нормали вертекса и направления зрения камеры.

Эффект силового поля (шейдер) Шейдеры, Unity3D, VFX, Gamedev, Гифка, Длиннопост, Силовое поле

отдаем всё это добро в пиксельный шейдер, где считаем возвращаемый цвет пикселя (на всякий случай добавил ещё и текстуру для поля, какие-нить флуктуации там добавить о.О

Эффект силового поля (шейдер) Шейдеры, Unity3D, VFX, Gamedev, Гифка, Длиннопост, Силовое поле

тут немношко вкусовщины... Смешение слоёв аддитивом, поэтому перемножение и цвета и альфы влияет на финальное изображение, а именно на переход от прозрачки к непрозрачки. Тут на вкус и цвет, как говорится, особенно поэкономить на этой функции не удастся, так как в любом случае придётся что-то на что-то перемножать, но под себя "поколдовать" можно попробовать.

Ну и сам эффект растекающейся энергетической вспышки

Эффект силового поля (шейдер) Шейдеры, Unity3D, VFX, Gamedev, Гифка, Длиннопост, Силовое поле

_InpactPoint - это вектор направления попадания (для отрисовки пятна в нужной стороне, передавать его придётся с помощью скрипта(конечное, минус начальное, ну и привести к единичке). Подсказочка:

Эффект силового поля (шейдер) Шейдеры, Unity3D, VFX, Gamedev, Гифка, Длиннопост, Силовое поле

Нормаль берём из вертекса.

_HitOverlayArea - регулирует величину пятна (плавность пятна зависит от полигонажа сферы, потому что работаем с нормалями вертексов. Тут немношко экономии - нормали берём в вертексном шейдере. Но если экономить не надо - можно нормаль посчитать и во фрагменте, тогда никаких проблем с размерами пятна не будет).

_HitOverlayValue - сила пятна.

_HitColor - собственно цвет для пятна.

Цвет самого поля задается через _TintColor и сохраняется в переменную col (код был выше).

Собственно сам инспектор всего этого добра, для тех, кто не хочет математики, а подёргать ползунки:

Эффект силового поля (шейдер) Шейдеры, Unity3D, VFX, Gamedev, Гифка, Длиннопост, Силовое поле

Надеюсь, что подписульки понятны лучше, чем названия переменных :)


Гитхаб: https://github.com/MrMouseSE/EnergyShieldShader

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

Disolve shader Unity3d

Дизолв шейдер для юнити

Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост

вот такой вот эффект. Можно катать в разные стороны по трём направлениям

Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост
Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост
Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост
Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост

Сам шейдер: https://yadi.sk/d/mZEL6dRYhHdhtA

в качестве бонуса и примера использования:

Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост
Disolve shader Unity3d Unity3D, Gamedev, Гифка, Длиннопост
Показать полностью 6

Практика в кодинге

нужны реальные задачи для практики в написании кода, у кого есть потребность в кодере начального уровня пишите. Например в скайп: danil-mouse или здесь . Само собой Gammdeff

Нужен ли кому программист?

Собственно сабж. Взялся бы что-то написать на unityC# или gms2. Из скилов 3д-моделлирование, эффекты, автоматизация процессов создания контента, немного шейдера. Телефон для связи 322222332... Можно в Скайп: danil-mouse

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