Как сделать шахматы на юнити
И божечкимой, что за мастодонт получился на этот раз. А все из-за того, что я чутка ошибся в планах. Ну что ж, поехали!
Возникла внезапная проблема: пусть во время битвы герои и получают опыт, повышают уровень — но этот прогресс должен сохраниться только при успешном завершении уровня. А смена уровня у меня идет следующим пунктом плана работ!
Так что в этой части будет смена уровня вместо прокачки героев.
Вот какая штука. По моей задумке хочу сделать следующее:
1) Сделать выбор следующей битвы так же, как в AFK Arena сделан мистический лабиринт.
Игрок может выбрать только ближайшую к себе точку. Например, он выбрал клетку с Мистиком. Тогда следующим шагом он может выбрать либо правую точку (карету), либо центральную. Крайний левый флаг будет для него недоступен Скрин с нета
2) Сделать выбор следующей битвы максимально простым.
Загвоздка в том, что вариант с лабиринтом сложен для восприятия — а я хочу, чтобы моя игра была максимально однокнопочной.
Плюсы же лабиринта очевидны — игрок сам решает, что ему будет комфортнее на следующем шаге, у игрока есть выбор, что делать дальше. Плюс игрок видит точки интереса на всей карте и может планировать свой маршрут, исходя из этого.
Хмм, в лабиринте игрок принимает решение… Делает выбор… Планирует маршрут… Стоило только озвучить проблему — тут же пришло в голову решение. Сочетает и простоту восприятия, и предоставляет игроку выбор, игрок ощущает, что он принимает решение. Встречайте!
Тут игрок сражается с противником, после чего выбирает, что ему делать дальше: пойти в следующую битву или пойти в… Эээ, пока не анонсированную, но уже придуманную сущность. О ней будет одна из следующих статей ;)
Решение не идеально — не хватает третьего компонента. Игрок должен понимать, какое решение сделает его игру проще / сложнее, и выбирать наиболее комфортный для него путь. Привет, теория потока. Пока что это просто голый выбор из двух вариантов — я не считаю, что этого будет достаточно. Об этом подумаю где-то между статьями.
В юнити есть как игровые объекты (по сути, просто болванки, на которые можно повесить всякое), так и готовые кнопки интерфейса. И на то, и на другое можно нажать (но с объектами нужно извращаться для этого).
Выбор следующей битвы представляю в виде условных островков, соединённых линиями. И вот эти островки могут выглядеть по разному: например, с замком на нем. И вот мне почему-то кажется, что GameObject больше подходит для такого.
С другой стороны готовые кнопки уже имеют важную для дальнейшего реализацию — всякие красивости для нажатого состояния, отпускаемого, ну и так далее. Итак, выбираю! Следующие уровни будут отображаться в виде UI кнопок — как раз потому что они уже имеют нужную мне визуализацию нажатий.
Есть два варианта:
Пока что выбрал второй вариант. С ним игра банально переходит между этими состояниями быстрее. Минус пока один — игра вроде как кушает больше ресурсов. Сделаю — проверю.
Суть вот в чем. Будет примерно следующее
Но сейчас у меня при старте на сцене куча объектов безо всякого порядка — в основном из-за того, как сделан спавн героев игрока и противника.
Решаю просто: перед вызовом спавна героев создаю два дополнительных объекта — для героев игрока и героев противника соответственно.
Какое-то адское извращение, но работает же!
После этого при спавне героев достаточно указать, что соответствующий _goParent… их родитель. Это так мило — теперь у них есть родитель.
Главное, что мне это дало — как только spawner отключается, пропадают все герои и панель с их скиллом. И появляются при его включении.
На данный момент этого достаточно, но чуть позже в рамках этого этапа нужно сделать так, чтобы при повторной активации все вновь появлялись на своих первоначальных местах — ну и чтобы сбрасывались их параметры.
Ах да — забыл. Теперь архитектура объектов на сцене выглядит вот так
Дальше нужно добавить саму структуру кнопок / битв. Располагаться они будут как на одной из картинок выше.
Хммм, а как это сделать кодом?
Конечно же, первым делом полез в интернет! Наверняка уже кто-то такое делал) Только ничего подобного не нашел. Хорошо, придется думать.
У меня есть повторяющийся паттерн поведения: 1 — 2 — 1 — 2 и так далее. Значит, мне нужно сделать так, чтобы на экране появлялась комбинация "1 — 2". Хотя стоп — а вдруг я захочу сделать 1 — 2 — 2 — 2 — 1 или что-то такое.
Между делом наткнулся на новую для себя в юнити штуку — Grid. Судя по всему, там как раз можно задать любой шаблон — в том числе такой, какой мне нужен. Но как-то не удалось заставить его работать.
В итоге придумал какую-то абсолютно хитровыдуманную конструкцию. Что-то мне подсказывает, что я перемудрил
Ну и что я натворил
Тогда я делаю что-то типа такого:
И да, в первом случае for не нужен, но это для меня. Иначе могу запутаться.
По задумке с одной стороны будут битвы, с другой — будет находиться эта самая сущность. Но тут вообще просто — создаю функцию SetBtnType(int type)
И добавляю ее вызов в SpawnMap() куда-нибудь в конец
Тут я понимаю, что забыл повесить какой-нибудь скрипт на кнопку карты. Так что делаю новый скрипт ClickMapBtn и вешаю на префаб кнопки карты. Щас будет полное извращение, но в этом скрипте у меня будет в том числе храниться индекс этой кнопки 0_о
Конечно, и в самом спавнере еще нужно добавить массив с кнопками.
Помните DEBUG_SWITCH , которая просто отключает / включает объекты? Забудем о ней! Теперь на каждом объекте есть скрипт, который не просто отключает объекты, а еще делает что-нибудь с их параметрами, если это нужно.
И эта свитч вызывает нужную функцию из скрипта каждого такого. По сути, у моих объектов появился контроллер, отслеживающий их состояние. Круто же!
Какие типовые сущности у меня есть? Герои, кнопки их скиллов и кнопки карты.
Сходу наткнулся на интересное архитектурное решение. По какой-то причине контроль ползунков на кнопке использовании скила у меня находится… В скрипте Characteristics . Это гениально, не иначе. Значит, переношу всю эту систему туда, где ей самое место — в скрипт копки. А Characteristics будет туда только передавать актуальные данные.
Заодно исправил незамеченный баг с постоянным ускорением наполнения маны. И добавил шкалы здоровья с маной над всеми героями — ничем не отличается от аналогичных шкал на кнопках.
Честно — понятия не имею, как ее сократить. Первый for проходится по всем героям игрока, следующий — по героям противника. Если попытаться сразу обновить цель для героя в первом цикле, то герои игрока не найдут противника, увы.
А всякие WakeUp вообще простейшие
В итоге получилось вот так
При респавне герои начинают с начальными характеристиками.
Следующая задача — поменять сущность имеющихся спавнеров. Теперь их задачей будет что-то типа инициализации объектов: создание, выдача параметров, но не появления на экране. За появление отныне отвечает SwitchActiveState, в котором у меня и происходит переключение. Это ответственная задача, но я верю в него.
Игра умеет менять состояние "битва / карта", теперь нужно сделать так, чтобы кнопки на карте запускали битву — причем разную в зависимости от кнопки!
Для этого вернусь в скрипт, спавнящий на карте кнопки боев и добавлю что-то типа такого
Гляньте, как классно все получается! Номер уровня увеличивается только у кнопок по центру и крайних левых
Подготовка завершена! Теперь, наконец, можно запускать битву, выбрав нужную кнопку на карте.
В скрипте смены состояния делаю небольшие перестановки, вынеся кучу текста по разным функциям
И происходит магия!
Тут можно увидеть, что включаются разные уровни в зависимости от нажатой кнопки. Еще можно заметить, что правые кнопки ничего не включают — это нормально пока что. Там будет кое-что другое.
В дальнейшем уровни будет отличаться — противниками и сложностью. Но сделать это смогу только когда разберусь с серверной частью.
Игра научилась запускать нужную битву и выходить обратно на экран карты. Считаю, это успех! Остался только маленький штрих
(); if (_typeOfLevel == 0) _lvlName.text = "Secret"; else if (_typeOfLevel == 1) _lvlName.text = "battle " + _levelNumber; >
Уф, теперь можно заняться прокачкой героев. Вернусь, когда с ней закончу!
Вопрос для всех, кто публикуется в инди. Автор, для чего ты это делаешь, когда тут дают 5 плюсиков и может быть 2 с полоивиной реальных прочтений? Абсолютно мертвый раздел, хоть на него и подписано формально якобы пол миллиона. (что просто смешно, столько реальных пользователей дтф даже близко нет — здесь максимум 2-3 тысячи уников в день, которые что-то читают, а не смотрят картинки)
Я тоже делаю игру и иногда хочется о ней рассказать. Но здесь рассказывать - это примерно как в шкаф залезть и там самому себе это проговорить.
Первоначальный мотив - просто расслабиться, отдохнуть и подурачиться) собственно, как и разработка
Сейчас много всякого, а так я отдыхаю)
А какие есть альтернативы?
Нету. Никому неинтересно, как делаются игры.
Обратное впечатление создалось от кикстартерных апдейтов inxile и obshitian. Фанбои уже существующих студий жадно глотали любые капельки информации об играх, которые им наобещали и до которых еще оставалось много лет до релиза. На деле же, в вакууме, никому неинтересно как делается _какая-то_ игра.
Я делаю игру, которая для меня ппц как интересна с точки зрения геймдизайна и мне реально не терпится посмотреть, как её воспримут. Она отматывает 20 лет неверного развития жанра - ответвляется от того, где жанр был 20 лет назад и уходит в другом направлении. Для меня это с ума сойти как интересно. Жена практически засыпает, когда я ей рассказываю. Могу представить реакцию на дтф.
Верно) интересен сам контент - то, как написан рассказ и все такое. Если все это сделано интересно, то часть читателей в итоге поставит ту игру, о которой они читали)
В твоем случае, ты публикуешь в данном посте что то про разработку механик и код, что на мой взгляд не совсем то что хочет почитать игрок, это интересно скорее разработчикам, коих в разы меньше чем потенциальных игроков. Игрокам все это знать не обязательно, игрокам интересен геймплей, его детали и визуальный показ чего либо. И то при условии что им интересна игра.
Разработчикам неинтересно читать про код, они и сами про него всё знают.
Мне действительно читать код было не интересно, слишком много написано и не понятно, что он с собой принесет.
Недавно мы рассказали о том, как научиться разработке игр на Unity . Продолжим тему на практике и покажем, как новичку создать на этой платформе первую 2D-игру.
Если вы хотите получить более систематическое образование в области разработки игр, мы рекомендуем рассмотреть факультет разработки игр онлайн-университета GeekBrains.
Двумерные игры сравнительно просты: для них не требуется сложных 3D-моделей, программный код по сравнению с 3D-проектами выглядит понятнее. Такие игры популярны как на десктопах, так и на мобильных устройствах. Unity также позволяет разрабатывать игры и для браузеров.
За последние годы вышло много популярных двумерных игр:
Программная реализация 2D-игр проще не только из-за отсутствия третьего измерения: на самой сцене меньше объектов, вместо трехмерных моделей плоские спрайты, вместо скелетной анимации – покадровая. А еще 2D-игры проще портировать на другие платформы – легче найти новую аудиторию.
Давайте создадим простую игру в жанре пинг-понг 🏓 . Перед тем как приступить к созданию игры, продумайте, какой именно результат хотите получить. На первых этапах рекомендуется использовать схематические шаблоны, чтобы быстрее получить работающий результат. В этой инструкции мы так и поступим. Графических ресурсов использовать не будем: и ракетки, и отбиваемый мяч будем пока отображать простыми белыми спрайтами.
Предварительно рассмотрим основные понятия Unity, без понимания которых будет проблематично создать игру:
Предполагаем, что вы уже установили редактор и создали аккаунт на портале Unity.
В первую очередь создадим новый проект и откроем его настройки (Edit → Project Settings). Во вкладке Editor установим параметр Default Behaviour Mode в значение 2D
Настройка проекта Детальная настройка проекта
Следующим шагом сохраним текущую активную сцену, назвав ее, например, Scene1. Теперь создадим основные игровые объекты: ракетку, мяч и менеджер игры, в котором будет храниться основная логика игры.
1. Создаем пустой объект, переименовываем в GameManager.
Создаем пустой объект
3. Создаем квадратный спрайт, называем его Pad (Assets → Create → Sprites → Square). Аналогично создаем круглый спрайт Ball (Assets → Create → Sprites → Circle). Масштабируем спрайт Pad со следующими параметрами – x:0.5, y:2.5, z:1.
Создаем спрайты
4. Создаем префабы для Pad и Ball, после чего добавляем к ним компонент Box Collider 2D (включаем параметр Is Trigger) и компонент Rigidbody 2D (выставляем параметр Body Type в значение Kinematic).
Добавляем .компонент Box Collider 2D Настраиваем.компонент Box Collider 2D Добавляем компонент Rigidbody 2D Масштабируем спрайты
6. Заполняем скрипты следующим кодом.
GameManager.cs Ball.cs Pad.cs
6. Добавляем к префабу Ball и Pad теги с аналогичными именами. Выделив префабы, в инспекторе мы можем видеть выпадающий список тегов. Там же расположены и кнопки для добавления и редактирования тегов.
7. В настройках камеры выставляем параметр Projection в значение Orthographic, а параметр Clear Flag – в значение Solid Color.
Настройка камеры
8. Настраиваем кнопки, как показано на следующих скриншотах (Edit → Project Settings → Input Manager).
Настройка ввода, основное Настройка ввода, первый игрок Настройка ввода, второй игрок
Вот и всё, игра готова!
Пинг-понг, итоговый результат
Билд для платформы Windows
1. Официальный туториал от Unity, где детально рассмотрен процесс создания roguelike RPG.
2. Youtube-канал Brackeys , где можно найти серию видеоуроков по созданию 2D-платформера.
3. Youtube-канал N3K EN содержит множество уроков как по отдельным компонентам Unity, так и полноценные серии уроков по созданию игр с нуля.
Если у вас мало опыта в разработке игр на Unity, мы рекомендуем обратить внимание на факультет разработки игр GeekBrains . Материал хорошо структурирован и содержит все необходимое для того, чтобы стать профессиональным Unity-разработчиком.
В числе прочего вы разработаете 2D-платформер с физическими загадками и динамическим освещением, научитесь портировать его на мобильные устройства. Кроме того, разработаете полноценную браузерную стратегию, а также игру в жанре двухмерных гонок.
По окончании обучения вы будете иметь портфолио из 4 игр, которое можно показать на собеседовании. Если же какая-то часть материала будет непонятна, вы всегда можете обратиться к персональному преподавателю.
Unity — это среда, которая позволит детям почувствовать себя настоящими разработчиками игр! На движке Unity 3D ребята могут создавать анимацию, запрограммировать игровую сцену и полноценные игры. А также познакомиться с языком программирования "Си шарп", на котором в Unity пишутся скрипты.
Школа программирования для детей "Пиксель" подготовила бесплатные уроки Unity 3D, которые познакомят детей с программой и научат создавать первые игры. Поддержите нас, ставьте палец вверх, если наш бесплатный курс по Юнити окажется полезным для ваших детей.
Как скачать Unity 3D на ПК
Для начала скачаем и установим программу на компьютер.
Урок 1. Как сделать анимации в Unity 3D
Начинаем уроки по Юнити. Первый шаг — анимирование персонажа. Мы добавим нашего дракона на сцену, изменим его размеры, научим его двигаться и бегать с заданной скоростью. Напишем наш первый скрипт.
Урок 2. Как сделать телепорт в Unity 3D
Мы узнаем, как сделать так, чтобы персонаж быстро перемещался с одной точки сцены в другую. Возьмем два куба и создадим для них скрипт: при касании одного куба наш персонаж будет мгновенно перемещаться к другому кубу.
Урок 3. Как сделать спавн объектов в Unity 3D
Мы изучим 2 способа создания спавна объектов: на канвасе (canvas) и в пределах камеры. А еще узнаем, как создавать префабы.
Урок 4. Триггеры в Unity 3D | Столкновение персонажей
Триггеры чаще всего нужны, чтобы собирать бонусы в игре или наносить урон персонажу. Поэтому в этом видео мы научимся программировать сбор бонусов и сталкивать персонажей.
Урок 5. Как создать таймер в Unity 3D
Таймер нужен для почти любой игры, мы научимся создавать его с помощью корутины (Coroutine) и команды InvokeRepeating.
Урок 6. Перемещение объекта мышью в Unity 3D
Функция Mouse Drag или, по-другому, метод перетаскивания нужен для того, чтобы перетаскивать объекты в игре. Например, как мы показываем в видео, чтобы перемещать еду на персонажа и кормить его.
Урок 7. Как сделать полосу здоровья персонажа в Unity 3D
Health Bar или полоса здоровья тоже неотъемлемая часть любой игры. Мы научимся ее программировать, так чтобы полоса плавно увеличивалась и уменьшалась.
Урок 8. Как сохранить игру в Unity 3D
Если мы хотим сохранять очки или уровни в нашей игре, то нужно воспользоваться методом PlayerPrefs.
Урок 9. Создаем игру "Раннер" в Unity за 30 минут
Урок 10. Как экспортировать игру из Unity на ПК или Android (как настроить для Play Market)
В этом видео расскажем, как собрать игру под ПК или под Android: в каком порядке собрать сцены, какие им дать номера, а еще какие настройки нужны, чтобы загрузить игру Play Market.
Урок 11. Как загрузить игру в Play Market
Мы собираем игру и заполняем все настройки для Play Market. Теперь другие пользователи смогут сыграть в вашу игру, а вы будете на этом зарабатывать.
Урок 12. Как сделать прыжок в Unity 3D
В этом уроке мы разберем, как сделать прыжок персонажа в 2D- и в 3D-проекте. Для этого мы создадим две сцены, напишем скрипты на языке Си Шарп.
Урок 13. Как управлять персонажем в Unity 3D
Давайте научим нашего персонажа двигаться. Для этого мы зададим переменные типа float, они будут отвечать за скорость, поворот и перемещение по горизонтали и по вертикали. И, конечно, напишем скрипты для 2D- и 3D-версии игры.
Урок 14. LineRenderer в Unity 2D
LineRenderer позволяет упростить рисование линий. В этом видео мы напишем два скрипта: Line Point позволит проводить прямую линию между любыми двумя точками, а с помощью Draw Line мы сможем рисовать неотрывную линию.
Урок 15. Как сделать автосимулятор в Unity 3D | Как сделать гонки в Unity 3D
Пришло время сделать гоночную игру! Давайте построим небольшую трассу, настроим модель автомобиля и напишем код для коробки передач: наш автомобиль будет двигаться в разные стороны и менять скорость.
Наши плейлисты регулярно пополняются, подписывайтесь на наш YouTube-канал , чтобы следить за выходом новых видео и открывать для себя мир IT-технологий!
Если же вам нужен наставник, загляните в Школу программирования для детей “Пиксель”: запишитесь на полный курс по разработке игр на движке Unity 3D .
Подборка онлайн-курсов по разработке 2D- и 3D-игр с нуля до уровня PRO.
Длительность: 72 часа.
Формат обучения: записи видеоуроков и домашние задания (без проверки).
Программа обучения: курс поможет создать простую игру без навыков программирования. Материал рассчитан на новичков, которые рассматривают разработку игр в качестве возможной сферы деятельности.
Какие темы охватывает курс:
- Обзор интерфейса и основных функций Unity.
- Принципы создания игровых механик и драфтовой геометрии.
- Подключение 3D-моделей из бесплатной библиотеки.
- Стилизация готовой игры.
- Не требуется базовая подготовка.
- Бессрочный доступ к материалу.
- Есть чат для общения с другими учениками.
- Мини-курс даёт поверхностные знания, для создания полноценных игр необходимо обучение на платном курсе.
Об авторе: Игорь Зверев, ведущий геймдизайнер в студии VooDoo.
Длительность: 9 уроков.
Формат обучения: видеоуроки и статьи.
Программа обучения: рассчитана на новичков, интересующихся сферой создания игр. Курс включает основы по работе с платформой Unity. Слушателей ждёт обзор интерфейса и основных функций движка, а к концу обучения каждый сможет самостоятельно простую 3D-игру.
Длительность: 9 уроков.
Формат обучения: чтение статей и просмотр видео.
Длительность: 17 уроков.
Длительность: 18 уроков.
Длительность: 9 уроков.
Длительность: 8 уроков.
Длительность: 9 уроков.
Длительность: 6 уроков.
Формат обучения: видеоуроки.
Программа обучения: курс от компании Microsoft с пошаговыми уроками по созданию игры на Unity. Будет полезен тем, кто задумывается о карьере разработчика, но не уверен в своих силах и возможностях.
Что узнаете:
- Как установить Unity.
- Как создать персонаж и настроить физику.
- Способы перемещения сцены.
- Особенности создания игры на Unity.
- Актуальная информация по теме.
- Ёмкие уроки без воды.
- Ссылки на интересные статьи по теме.
Длительность: 14 часов.
Формат обучения: видеоуроки, викторины и практические задания для отработки полученных знаний и навыков. Есть дополнительные материалы (учебник, статьи, руководство по интерфейсу).
Программа обучения: курс предназначен для преподавателей, которые желают преподавать Unity другим людям. Он состоит из отдельных блоков, каждый из них охватывает 5 тем. Представленный материал даёт основную теорию и практические идеи.
Чему научитесь:
- Использовать функции и возможности Unity.
- Самостоятельно разрабатывать учебный план.
- Преподавать Unity в рамках различных образовательных проектов.
- Ценные советы и лайфхаки от зарубежных преподавателей.
- Приобретение опыта в создании проектов.
- Есть открытый форум для общения.
Длительность: 2 часа 45 минут.
Формат обучения: видеоуроки без заданий и обратной связи.
Чему научитесь:
- Информативный курс для новичков при минимальной продолжительности.
Длительность: бессрочный доступ — продолжительность обучения зависит от количества выбранных пособий и скорости изучения материала.
Формат обучения: чтение учебников и самостоятельная отработка навыков на собственном компьютере.
Какие темы можно изучить:
- Основы работы в Unity.
- Управление объектами (создание, загрузка, отслеживание и сохранение).
- Алгоритмы создания простой игры.
- Методы рендеринга в Unity.
- Ценные материалы в бесплатном доступе.
- Качественные скриншоты с примерами.
- Бессрочный доступ к учебникам.
Длительность: 22 урока.
Формат обучения: просмотр видеоуроков.
Какие знания и навыки получите:
- Ёмкие уроки с пошаговой инструкцией.
- Высокое качество и небольшая продолжительность видео.
Длительность: 10 уроков, общая продолжительность 1 час 45 минут.
Формат обучения: просмотр видеоуроков.
Программа обучения: курс рассчитан на широкую аудиторию. Программа будет интересна всем, кто хочет разобраться с движком Unity3D и самостоятельно делать игры.
Что узнаете:
- Небольшая продолжительность уроков для лёгкого восприятия.
- Курс содержит необходимый минимум для новичков.
Основатель и главный редактор проекта. Специалист в области интернет-маркетинга (SEO-продвижения и копирайтинга, в частности). Работаю онлайн с 2018 года.
Так что же такое Bolt? А главное – зачем и кому может пригодится?
Зачем же тогда Unity создали этот инструмент?
На самом деле все довольно просто. Основная задача визуального программирования – это наладить тесное сотрудничество между программистами и теми членами команды, которые далеки от понимания кода (художники и дизайнеры). Используя визуальные сценарии будет намного проще выполнять такие задачи как:
- создание события диалога между персонажами
- добавление новых навыков игрока
- создание визуальных эффектов
- добавление ловушек на уровни
- регулирование триггеров
- подбор анимации для сцены и многое другое.
При этом Bolt дает возможность совмещать и визуальные сценарии и код, если это необходимо. Либо открывать и редактировать код уже готовых визуальных узлов. Вся суть сводится к тому, чтобы предоставить разработчику возможность и инструменты для наиболее быстрого и оптимального создания игр тем методом, который ему представляется наиболее удобным.
Практически сразу после релиза первой версии Bolt, Unity анонсировали разработку Bolt 2, которая учтёт все возможные замечания и недостатки первой версии и расширит его базовые возможности, масштабируемость, производительность и простоту использования. Примечательно, что новые версии Bolt будут автоматически добавляться во все текущие Unity планы для всех пользователей совершенно бесплатно.
Но если Вы графический дизайнер, либо обладаете самыми начальными знаниями в написании кода, то это именно то, что Вам нужно. Этот инструмент даст Вам возможность целиком и полностью сосредоточится на визуальных эффектах и логике построения игры.
Пошаговая инструкция по работе с Bolt доступна в официальном туториале от Unity. Но чтобы сделать этот инструмент понятным русскоязычной аудитории, UNITY3DSCHOOL обязательно запишет обучающий курс, посвященный данной теме.
Читайте также: