AlexanderDllSky

пикабушник
поставил 3676 плюсов и 6184 минуса
проголосовал за 0 редактирований
2154 рейтинг 123 подписчика 403 комментария 54 поста 6 в горячем
24

СПб. Отдаю билет на "Моральный Кодекс"

Всем привет! Так сложилось, что я выиграл билет на концерт группы "Моральный Кодекс", который состоится 17 апреля в ресторане Альпенхаус (Санкт-Петербург).
Сам я не фанат этой группы, так что отдаю этот билет. Отдам бесплатно первому забравшему, без "бронирования".
Забирать можно м. Петроградская, м. Девяткино.

СПб. Отдаю билет на "Моральный Кодекс" Санкт-Петербург, Моральный кодекс, Концерт, Бесплатно
73

Делюсь архитектурным шаблоном (StarterKit) для Unity проектов

Всем привет!


Периодически я пилю тут посты, которые с переменным успехом то набирают плюсы, то набирают минусы)))


Сегодня хочу поделиться шаблоном (в некотором роде "стартеркит") Unity-проекта, подходящего почти для любой игры. Набросал его для одной из инди-команд сообщества "Индикатор".


В основном это архитектура пользовательского интерфейса и логика загрузки сцен. И, конечно же, простой аудио-контроллер. И менеджер кастомных событий, что бы помочь новичкам избегать глупостей вроде постоянного отслеживания здоровья Игрока в методах Update какого-нибудь компонента-счетчика здоровья.

В репозитории (ссылку приведу в конце) используется как собственный код, так и сторонний (NonDrawingGraphic, UIParticleSystem).


Сейчас это шаблон с примером реализации Главного Меню (назову это "Экраном") и появляющегося окна (назову это "Диалогом").

Произвольные экраны и диалоги - это префабы со своей реализацией родительских классов ScreenController и DialogController. В случае диалогов, если не требуется выполнять никаких особых, не предусмотренных классом-родителем, действий - то можно использовать родительский класс без ущерба функциональности.


Логика следующая - существует главная сцена с контроллерами/менеджерами. "Главный Игровой Контроллер" при загрузке игры (появлении этой сцены при запуске) отображает загрузочный экран (назову это "Прелоадером").

Затем (не реализовано, т.к. это индивидуально для каждого проекта) предполагается чтение/загрузка настроек, конфигураций, файлов-сохранений и пр.

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


Буду очень рад вопросам, критике и советам по улучшению.
Ссылка на репозиторий: https://github.com/DL-SKY/PrototypeForIndicator

Надеюсь, кому-нибудь пригодится.

Удачи и успеха всем в геймдеве!

Play Market. Праздничные промо-коды для Boomerang Boom Master

Всем привет!
На носу новогодние праздники!
В связи с этим делюсь праздничными промо-кодами для гиперказуальной игры Boomerang Boom Master

HoHoHo - даст монеты и бустеры
PIKABU - даст уникальный бумеранг, немного монет и бустеров

Play Market. Праздничные промо-коды для Boomerang Boom Master Игры, Промокод, Google Play, Android

Если кто-то хочет посоревноваться в сборе рейтинговых очков - добро пожаловать! Ссылку на игру остватавлю в комментариях.

-10

Unity. Уроки. Как добавить в игру промо-коды

Привет, Игроделы-С-Пикабу!


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

А расскажу на примере тестируемой казуалки "Boomerang Boom Master".

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

Как и всегда в программировании, это можно реализовать разными способами. Я же рассмотрю вариант, когда список заготовленных промо-кодов и предметов, которые они выдают, реализован в виде статического класса.

Итак, для начала создадим класс "Данные Промо-кода", который будет содержать сам промо-код и набор предметов (словарь):

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

id - это идентификатор кода, который для активации нужно будет ввести посимвольно с учетом регистра.

prizes - словарь получаемых предметов с сигнатурой <"строковый идентификатор предмета", "целочисленное кол-во предметов">.


Так мы получили описание "одной единицы промо-кода". В сохранении мы будем хранить идентификаторы (id) использованных промо-кодов, что бы избежать многократного их использования одним игроком. А в статичном классе мы будем хранить список всех доступных в игре промо-кодов именно в виде списка с элементами класса BonusCodeData.


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

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

Заполним список несколькими промо-кодами.

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

Здесь (в примере поста) для упрощения идентификаторы предметов "написаны вручную". Однако, в рабочем варианте я указываю константы из статичного класса "ConstantsResource". Это облегчает отладку, если идентификаторы предметов/ресурсов в коде используются неоднократно. А так же это упрощает изменение этих идентификаторов.

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

На этом подготовка промо-кодов завершена. Теперь переходим к механизму активации этих промо-кодов...


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

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

Для этого поля ввода пишем обработчик окончания ввода:

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

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

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

В итоге получаем что-то типа такого:

Unity. Уроки. Как добавить в игру промо-коды Unity, Мануалы, Gamedev, Indiedev, Tutorialsgamedev, Гифка, Длиннопост

Вот один из способов, как можно относительно просто добавить механизм промо-кодов в свои игры.

Если кому-то интересно, в следующий раз могу рассказать про локализацию.


А если кому-то интересно посмотреть на игру в живую, вот ссылка:

https://play.google.com/store/apps/details?id=ru.dllsky.boom...


Спасибо за внимание и успеха в геймдеве!

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

Ищу художника на гиперказуальную игру

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

Так вот. Я хочу найти для этого проекта художника!

Это игра про бумеранг, игра-испытание. Бумеранг летит по своей кривой траектории, игрок может "замораживать на месте" бумеранг на время, что бы увернуться от препятствия или что бы подобрать монетку. Необходимо набрать как можно больше очков.
В игре планируется разнообразие бумерангов (включая отсылки-лукалайки на молот тора, щит Америки, бетаранг) со своими характеристиками и разные фоны.
В игре есть бустеры для восстановления очков здоровья, шкалы заморозки бумеранга и двойного получения очков рейтинга.
Внедрена монетизация, достижения и таблица рекордов.
Так же добавлена система промо-кодов.

Я люблю Пикабу, поэтому в проекте нашлось место секретному Пикабу-бумерангу и достижению.

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

Спасибо всем и всем успехов в геймдеве!

Ищу художника на гиперказуальную игру Indiedev, Gamedev, Собираю команду, Длиннопост
Ищу художника на гиперказуальную игру Indiedev, Gamedev, Собираю команду, Длиннопост
Ищу художника на гиперказуальную игру Indiedev, Gamedev, Собираю команду, Длиннопост
Показать полностью 3
9

Mad Game Master на White Nights.

Всем привет!
Мне, как и многим другим, удалось побывать на конференции White Nights Moscow и пошоукейсить альфа-версию игры.

Mad Game Master на White Nights. Gamedev, Длиннопост, Indiedev, Инди, Белые ночи, Конференция, Гифка

Было потрясающе. Получил фидбек от игроков/разработчиков и издателей. Посетил доклады Unity, познакомился с другими разработчиками.

Mad Game Master на White Nights. Gamedev, Длиннопост, Indiedev, Инди, Белые ночи, Конференция, Гифка
Mad Game Master на White Nights. Gamedev, Длиннопост, Indiedev, Инди, Белые ночи, Конференция, Гифка
Mad Game Master на White Nights. Gamedev, Длиннопост, Indiedev, Инди, Белые ночи, Конференция, Гифка

А это мой скромный стенд

Mad Game Master на White Nights. Gamedev, Длиннопост, Indiedev, Инди, Белые ночи, Конференция, Гифка

Как я и ожидал, туториал не понравился всем. К моему счастью, я получил дельные и интересные советы от нескольких дизайнеров.
Помимо переделки обучения, были предложения по добавлению альтернативного управления картами.
Художник, к сожалению, мало что успел к шоукейсу, поэтому в основном графика осталась моей (читай "ужасной").
Конференция прошла очень продуктивно. И, надеюсь, после всех правок игра будет более понятна игрокам.
Спасибо всем, кто делился и делится своим мнением, касательно игры. Скоро, я на это надеюсь, она графически будет более приятна, чем сейчас. Вот наброски классов

Mad Game Master на White Nights. Gamedev, Длиннопост, Indiedev, Инди, Белые ночи, Конференция, Гифка
Показать полностью 5
31

Unity3d: Создаем менеджер событий


Всем привет!


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


Рассмотрим ситуацию. Допустим, в интерфейсе разрабатываемой нами/вами игре есть верхняя панель с информацией о валюте игрока и опыте. Эти параметры могут меняться. И меняются они часто.


Как нам постоянно отображать в упомянутой выше панели актуальную информацию об этих параметрах?


* Обновлять информацию каждый кадр в "Update"?

Простой способ, но крайне не желательный с точки зрения оптимизации: "тут" каждый кадр избыточно делаем расчеты/обращения к каким-нибудь параметрам (которые не обновляются каждый кадр), "там" каждый кадр что-то делаем, "сям" и "еще в 30 местах"... Все это копится как снежный ком, а если еще и вычисления не самые простые, то рано или поздно скажется на производительности. Да и в дальнейшем сопровождать такой код может быть не просто...


* В компоненте, где могут измениться параметры денег и/или опыта добавить ссылку на "панель с информацией о валюте и опыте" и уже оттуда вызывать метод обновления отображаемой информации?

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


* Использовать "Менеджер Событий".

На мой взгляд это самый удобный и оптимальный способ. Где бы не происходило изменение значения денег или опыта, следом за изменением сообщаем Менеджеру, что произошло изменение ресурсов. И он уже "сообщает" всем подписавшимся на событие "изменение ресурсов", что событие гм... наступило.


Приведу один из вариантов реализации...


Это наш класс менеджера:

using System;

public static class EventManager

{

#region Actions

public static Action<string> eventOnResourceUpdate;

#endregion


#region Public methods

public static void CallOnResourceUpdate(string _resID)

{

eventOnResourceUpdate?.Invoke(_resID);

}

#endregion

}


Он статичный (модификатор "static"), это позволит использовать его без создания экземпляра. Action<string> eventOnResourceUpdate - это делегат (грубо говоря "событие", на которое мы будем "подписываться" в классе панели с инфой об опыте и валюте). Обратите внимание на <string> - это указан тип аргумента метода/методов, которые могут подписываться на данное событие - что бы не создавать "событие" для каждого ресурса и что бы не обновлять без необходимости информацию обо ВСЕХ ресурсах, метод обновления будет содержать один аргумент - строковое наименование ресурса.


А CallOnResourceUpdate(string _resID) метод, который мы будем вызывать в месте изменения ресурсов (н-р, при списании денег или получении опыта).


Строчка eventOnResourceUpdate?.Invoke(_resID) означает, что если делегат eventOnResourceUpdate НЕ пустой (НЕ равен null), т.е. имеет подписавшиеся методы, то только в таком случае будут вызваны/исполнены все подписанные методы.


Это фрагмент класса панели, отображающей опыт и деньги:

public class ProfileTopPanelController : MonoBehaviour

{

private void OnEnable()

{

EventManager.eventOnResourceUpdate += HandlerOnResourceUpdate;

}

private void OnDisable()

{

EventManager.eventOnResourceUpdate -= HandlerOnResourceUpdate;

}


private void HandlerOnResourceUpdate(string _resID)

{

switch (_resID)

{

case "experience":

UpdateExperience(); //Метод обновления информации об опыте

break;


case "gold":

UpdateCommonCurrency(); //Метод обновления информации о деньгах

break;

}

}

}


В Unity-методах OnEnable и OnDisable (обращаю внимание новичков на то, что очень важно соблюдать регистр написания этих методов, иначе Unity не будет использовать их, т.к. рефлексия их не найдет) мы соответственно подписываемся и отписываемся от делегата ("события обновления ресурсов") eventOnResourceUpdate. После этого все время, что панель активна, при вызове метода CallOnResourceUpdate в нашем Менеджере, панель будет выполнять код метода HandlerOnResourceUpdate с аргументом - идентификатором ресурса.


Если необходимо, что бы код выполнялся и во время временной "деактивации" панели (причины могут быть разные...), то отписку от события переносим в метод OnDestroy.


А это фрагмент кода в том месте, где идет изменение параметров денег/опыта:

//...

//Здесь код изменения кол-ва ресурса

//...

EventManager.CallOnResourceUpdate(_id); //А здесь идет вызов события изменения ресурсов, "_id" - это строковый идентификатор ресурса


Такое несложное решение, конечно же, можно использовать не только для "отслеживания" изменения ресурсов в вашей игре. Можно добавить любые события, которые вам необходимы. Нужно событие для сохранения? Оно может выглядеть следующим образом public static Action eventOnSave; какой-нибудь NPC получил новый уровень? Пожалуйста - public static Action<object> eventNpcNewLevel;


И т.д.


Думаю, на этом можно закончить.


Спасибо за внимание и успехов всем в ваших начинаниях!

Unity3d: Создаем менеджер событий Gamedev, Unity, Csharp, Gui, Длиннопост
Показать полностью 1
-8

Mad Game Master - технодемка #3

Всем привет!

Продолжаю работу над мобильной игрой, вдохновленной D&D, Reigns и Манчкином.


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

Mad Game Master - технодемка #3 Gamedev, Indiedev, Гифка

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


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


Спасибо всем, кто меня читает и дает дельные советы в комментариях! Когда-нибудь обязательно появится тематическая колода "Пикабу" и будут особые карты, в том числе и "секретные", только по промо-коду. Основы такого механизма уже заложены в архитектуру игры.


Вот ссылочка на APK: https://drive.google.com/open?id=1zrJdT3wir-Be4ao70345npz_-N...


...


Еще на днях прочитал книгу Сергея Галенкина "Маркетинг Игр". Очень интересно и познавательно для меня, как программиста, узнать немного про таинственный мир маркетинга и раскрутки...


Так же завел твиттер. На подходе группа в ВК, но руки еще не дошли))


Спасибо всем за внимание!

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

Mad Game Master - технодемка №2

Всем привет! Это снова я. И снова моя поделка, в которую хочется перенести атмосферу настольных игр, особенно Манчкина и D&D.

За две недели работы в режиме "хобби", то есть по ночам X_X, доработал техническую демо-версию до следующей удобоваримой итерации. Добавил туториал и чуть-чуть черновых зарисовок художника.

Mad Game Master - технодемка №2 Unity, Gamedev, Indiedev

Ах да, еще добавил музыку. С сайта https://incompetech.com/music/royalty-free/music.html, где можно найти бесплатную музыку по лицензии CC BY (http://creativecommons.org/licenses/by/4.0/). В трек для Главного Меню я буквально влюбился с первых секунд звучания...

Найдя треки и добавив их в Unity, я прошерстил свой проект и не нашел своего скрипта Аудио Менеджера. Поискал в прототипах за год и тоже не нашел. Расстроился, что придется писать с нуля, ведь я помнил, что уже работал над этим менеджером. Но на всякий случай проверил почту, папку "Сам себе" - ...иногда я присылаю на свой ящик какие-нибудь ссылки или файлы, если есть какая-то необходимость, но нет альтернатив. В этой папке я нашел письмо с Аудио менеджером, написанным около года назад (наверное, в поездке в отпуске), где для завершения функционала нужно было только добавить обработку событий изменения громкости.

Сегодня, точнее уже вчера, попросил художника скинуть какие-нибудь наброски, что бы графика была хоть где-то симпатичнее моих каракуль. И вот, собрал новый билд.

Если кому-то интересно, вот ссылочка: https://drive.google.com/open?id=1UgXkhcJA3fANuPT5m4OSq85oZi...

Спасибо за внимание!

8

Хочется сделать смесь Манчкина, D&D и Reigns

Что если ты "Инди-разработчик для души", и ты - единственный в команде (есть надежда на художника, но все ещё в процессе). И на этот случай нужно придумать что-то, где будут лаконично смотреться рисунки в жанре "программист рисует".
Поэтому в голову закралась идея некоего варианта кустарно сделанной настольной игры в мобильной версии. Вот тут-то мои художественные потуги будут оправданы скажем так лором игры.
Я отложил в сторону предыдущие 3D наработки в виду слива моделлера и принялся думать, что такое не сложное можно довести до релиза в одиночку (стороние контен-ассеты не рассматриваю в принципе, теряется уникальность).
Поэтому я вспомнил свой игровой опыт в Манчкина и Reigns. Настольная игра из карт. Вполне по силам. Но управление королевством как-то уже приелось.
Давайте посмотрим в сторону партийных игр. Отлично - игрок будет Мастером Игры. Чего бы оригинального придумать? А пусть ГеймМастер будет не обычным, а ковпрным. Он хочет погубить отряд и присвоить себе их лут и опыт.
Почему бы и нет? Ещё добавить щепотку юмора, или умереть пытаясь...
Откуда брать карты? Ну уж точно не из отдельного префаба. Режил всю логику карт (описание, характеристики, действия) описать таблицей в ГуглДок, а затем выгрузить в виде JSON и научить игру правильно читать эту таблицу.

Хочется сделать смесь Манчкина, D&D и Reigns Unity, Indiedev, Gamedev, Длиннопост

Нарисовал несколько черновых набросков карт

Хочется сделать смесь Манчкина, D&D и Reigns Unity, Indiedev, Gamedev, Длиннопост
Хочется сделать смесь Манчкина, D&D и Reigns Unity, Indiedev, Gamedev, Длиннопост
Хочется сделать смесь Манчкина, D&D и Reigns Unity, Indiedev, Gamedev, Длиннопост

В принципе, техническая демка готова, но она страшная. Без эффектов, красивостей и туториала. Но всему свое время.
Если кому-то интересно, могу дать ссылку на apk. Страшненько, но позалипать можно (если знать правила). Так же, если интересно, могу написать посты по технической части. Пишите, спрашивайте, интересуетесь.
И спасибо за внимание, разумеется!

Показать полностью 4
Отличная работа, все прочитано!