Вместе с Ильей Катковым, веб-разработчиком, IT-лектором и участником проекта «Ученый говорит» Российского общества «Знание», мы составили гид по миру видеоигр: как создать свою игру, не написав ни строчки кода, загрузить ее в AppStore и Google Play и получать доход. А после разработали план действий для людей, которые хотят создавать не простенькие игры, а целые миры.
— Один человек вполне может создать свою игру, примитивную или сложную, с использованием языка программирования или без него. Более того, люди зарабатывают на этом деньги. Такое направление называется инди-разработкой .
Одна из самых известных инди-игр — Minecraft. Ее создал шведский программист Маркус Перссон, через три года он продал ее за 2,5 млрд долларов. Менее популярная, но тоже нашумевшая игра, созданная программистом-одиночкой, — Papers, Please. В ней весь геймплей сводится к проверке документов на пограничном пункте и выживанию. Еще есть хоррор-игра Five Nights at Freddy’s, в которой веселые роботы-аниматроники бродят по детской пиццерии.
Можно ли сделать игру, если ты ничего не умеешь?
На эти игры разработчики потратили несколько лет — они сложные, объемные, сюжетные или с открытым миром. А вот простую 2D-игру можно сделать за неделю. И начать лучше всего с этого.
— Как сделать игру без знания языков программирования?
— Для этого нужно воспользоваться конструктором игр. Например, Game Maker, Construct 3, Stencyl. Туда можно загружать собственные картинки и звуки, а потом задавать им определенные параметры. Кодить ничего не придется. Только нужно иметь в виду, что все игры будут плоскими, 2D.
Как это работает, если разобрать процесс по шагам? Представим, что вы хотите создать, к примеру, лабиринт, по которому бегает герой-человечек, собирает монетки и время от времени встречает злодеев.
- Для начала нужно создать игровую комнату. Это один экран игры. Ее можно превратить в космическое пространство, а можно — в газон, по которому будет гулять игрок, всё зависит от задумки и фона, который вы поставите. В случае с лабиринтом можно оставить черный фон.
- Чтобы выстроить лабиринт, необходимо создать объект «стена» — этот объект уже есть в конструкторе. Потом на объект «стена» накладывается картинка — так у стены появится фактура или нужный цвет.
Затем надо поставить галочку, что стена — это статичный предмет, который герой не может пересекать, и просто разместить эти стены по игровой комнате, как это делается в игре The Sims. - Теперь персонаж. Загуглите «человечек бежит вперед/назад/вправо/влево гиф анимация» и скачайте наиболее приглянувшегося. Это подойдет, если игру вы создаете для себя и друзей. Если в планах игру продавать, то лучше сделать гифку персонажа самостоятельно или заказать у профессионального художника.
Затем останется соединить кнопку «вверх» с анимацией бега вверх, а потом поставить скорость передвижения в пять пикселей в секунду. То же самое нужно проделать с кнопками «влево», «вправо», «вниз». Если вы хотите, чтобы персонаж при беге топал, можно добавить звук топота, просто перетащив звуковую дорожку в программу. - Чтобы персонаж не пробегал сквозь стену, создается событие «столкновение с объектом „стена“»: если игрок врезается в стену, то его персонаж получает скорость ноль или бежит на месте.
- Теперь монетки. Нужно создать объект «монетка» и загрузить либо статичную картинку монетки, либо гифку — чтобы монетка крутилась и сверкала. У монетки нет никаких свойств кроме того, что до нее можно дотронуться. Когда мы задали ей это свойство, остается прописать последствия ее взаимодействия с игроком: если он столкнулся с объектом «монетка», то монетка исчезает, а в счетчике баллов у игрока прибавляется единица.
- Остался злодей. Он создается так же, как персонаж, только передвигается по своему конкретному участку, «патрулируя» его. Если игрок сталкивается с объектом «злодей», то он либо возвращается на стартовую точку, либо у него сгорает одна жизнь.
- Если хочется сделать игру многоуровневой, в конструкторе просто добавляются новые комнаты.
- На финальном этапе игра проверяется на баги. Вдруг в каком-то месте персонаж выбегает за пределы экрана или не может захватить монетку?
— Где играть в свою игру?
Как сделать игру, если ничего не знаешь?
— Проще всего играть на своем же компьютере — для этого игру нужно сохранить в формате .exe (в Windows. — Прим. ред.). Теперь она будет открываться как обычная программа. Или игру можно загрузить на сервис Game Jolt, чтобы она открывалась сразу в браузере.
Если игра создавалась для Android, то ее следует сохранить в формате .apk. Потом этот файл просто перекидывается на телефон и устанавливается.
Загрузить игру на Google Play тоже не проблема. Для этого нужно купить в своем аккаунте лицензию разработчика за 25 долларов, а после размещать там что угодно. В личном кабинете можно выкладывать скриншоты из игры, добавлять описания и иконки. Если Google Play вашу разработку одобрит, она попадет в общий список игр. И с этого момента игру может скачать любой пользователь Android.
Игра для iOS сохраняется в формате .ipa. Ее тоже можно загрузить в AppStore, но для этого нужно платить 100 долларов в год — столько стоит кабинет разработчика у Apple. Если перестать платить, то игра, даже одобренная, не будет доступна пользователям.
— Как создавать 3D-игры?
— Здесь не обойтись без языков программирования. В гейм-дизайне есть два больших направления: одни работают на C++, другие на C#. Нельзя сказать, что какой-то из этих языков лучше — оба хорошие. Просто кто-то привык работать на одном, кто-то на другом.
C++ нужно учить, чтобы затем создавать игры на движке Unreal Engine — он позволяет делать качественные 3D-игры. C# позволяет делать не менее качественные игры на движке Unity. Unreal Engine и Unity друг от друга мало чем отличаются, это два аналога, как камеры Canon и Nikon.
Внутри каждый из этих движков разделен на две части: пустое 3D-поле, которое надо наполнять, и редактор кода. В 3D-поле можно поместить отрисованного 3D-персонажа, просто перетащив мышкой с рабочего стола. Но шевелиться он будет только с помощью скрипта, который пишется на C++ или C#.
И над этим придется поработать. Для сравнения: на то, чтобы сделать в Game игру-платформер по типу «Марио», уйдет примерно неделя, а в Unity — три-четыре месяца.
— Как долго учить языки программирования и что придется делать еще?
— Основы программирования можно выучить за месяц-два. А дальше следует погружаться в выбранный движок и много гуглить. Язык программирования не подскажет, как обращаться к свойствам определенного объекта и работать с векторами.
И в этой точке обнаружится, что для создания игр еще очень нужны математика и тригонометрия. Чтобы игрок мог банально крутить камерой, программисту нужно просчитать синусы и косинусы. Так что перед более сложными играми придется подтянуть точные науки.
Работать в Unreal Engine и Unity сложно даже опытным программистам. Освоить эти движки — дело нескольких лет, даже если проходить обучающие курсы. Но в перспективе на этих движках можно создавать такие игры, как Fortnite, Hogwarts Legacy, Firewatch и др.
— Как зарабатывать на своих видеоиграх?
— Если говорить про игры для Android и iOS, то самый простой путь — сделать игру платной уже при скачивании. Это настраивается в кабинете разработчика Google Play или AppStore. Цену автор игры устанавливает на свое усмотрение.
Путь посложнее — задействовать релевантные рекламные площадки. В 2022 году в России функционируют, в частности, «Рекламная сеть Яндекса» (РСЯ) и Unity Ads.
Все рекламные площадки работают по одному принципу: после бесплатной регистрации пользователь получает API — набор символов кода, который нужно вставить в программный код игры (любой, даже простейшей 2D). API позволит связать рекламную площадку с вашим продуктом.
Здесь нужно решить, в какой момент вы хотите показывать рекламу. Допустим, вы хотите, чтобы реклама показывалась после того, как игрок проиграл. Вы находите это место, открываете специальную вкладку (здесь точнее прописать не получится, во всех конструкторах игр потребуются разные алгоритмы, так что рассказываю лишь про сам принцип) и добавляете туда API.
Как только игрок проиграет, он автоматически увидит рекламу: картинку или видео. Показ одной картинки в среднем стоит 10–20 копеек, видео подороже — около рубля. Если придет пользователь из другой страны, то за показ рекламы вы можете получить и больше. Но зарубежная реклама появится только при условии, что пользователь находится в другой стране или играет через VPN.
Еще более сложный путь зарабатывать на играх — создавать платные уровни или встраивать внутриигровые покупки. Но об этом пока лучше просто знать, описать это в одном гиде не представляется возможным.
И еще один вариант продвижения по пути успешного гейм-разработчика — это максимально широко рассказывать про свои игры, чтобы рано или поздно получить заказ от инвестора или бренда. Это тоже хорошая стратегия.
Еще больше интересных и полезных вещей о мире и месте человека в нем можно узнать из выступлений участников проекта «Ученый говорит», который организован Российским обществом «Знание». Уже более 3000 ученых из 85 регионов страны провели интерактивные лекции с VR-сопровождением, мастер-классы, иммерсивные шоу и научные дебаты в рамках проекта. Если вам интересно посмотреть такое выступление или самому выступить перед аудиторией, узнайте больше о проекте «Ученый говорит» на сайте.
Источник: knife.media
Программы для создания игр без программирования
В этой подборке собраны лучшие конструкторы для создания 2D и 3D игр. С их помощью легко создать шутер, стратегию, квест, гоночный симулятор без навыков программирования.
Quest Textadventures
Visionaire Studio
Game Maker
Construct 2
CraftStudio
Game Editor
Adventure Game Studio
Arcade Game Studio
Clickteam Fusion
Cocos Сreator
Программы для создания квестовых игр
Начнем наш рейтинг с тектовых программ для квстовых игр.
Quest Textadventures
Функционал
Игровой редактор для создания квестов, приключенческих игр и интерактивной фантастики. Программа с открытым исходным кодом предоставляется бесплатно.
После запуска редактора рекомендуется просмотреть созданные другими пользователями игры. Во вкладке «Play» можно загрузить квест из каталога. Программа автоматически скачает игру и предложит ее запустить. Разобравшись с механикой, разработчик может приступить к созданию своего проекта во вкладке «Creat», на выбор предлагается текстовый квест или интерактивная книга.
Доступные инструменты: создание комнат, объектов, работа со скриптами, плеер для отображения кнопок, иконок, интерактивных окон, настройка интерфейса, выбор цвета и размера текста, шрифта. Меню игрока: количество очков здоровья, денег, вещей в инвентаре и других объектов.
Интерфейс программы переведен на английский и немецкий язык. Софт работает только под управлением операционной системы Windows. Скачать дистрибутив на жесткий диск можно на официальном сайте. Пользователи других OS могут воспользоваться онлайн-версией продукта, доступной после регистрации.
- Textadventures выбор языка игры
Источник: softobase.com
Как я делал свою первую игру
Это будет нетипичный лонг по созданию игры, я начну с самого начала. Первое что нужно знать, что я никогда не разрабатывал игры.
Почему Unity?
Ну, начнем с того, что YouTube просто забит уроками, как на русском, так и на английском. Поэтому изучение программы на начальном этапе довольно простое.
Вы можете спросить меня: «А как же C#?» А он разве сложный? Весь код, который будет использоваться на начальном этапе есть в интернете. Тут главное понимать, что он делает.
«Но есть же Unreal» — может возразить юный хейтер, но где ты видел инди разработчика, который в одиночку создает игры? И не нужно приводить в пример корейца, который заканчивает очередную игру, пока ты спишь.
Как по мне, Unity будет намного проще на начальном этапе, так как с самого начала на нем учат делать 2D-игры.
Мотивация
Конечно же Деньги! Я зашел на Head Hunter и посмотрел вакансии. А чем я хуже? Вообще хорошей мотивацией могут стать различные ролики по Game Jam. Их на ютюбе навалом, можно смотреть не переставая.
Обучение
Итак, ролики я посмотрел. Что дальше? А дальше — просмотр обучающий роликов! Подойдут любого качества, главное чтобы тебе было понятно, правда от местного кода может стать плохо.
Я начал с курса от loftblog. Мало того, что в коде не было нормальной читаемой структуры, так он еще оператор if-else не перенес на след строчку!
Меня хватило на пять уроков, поэтому я решил создать новый проект и сделать все по-нормальному.
Концепция
У меня нет опыта в Unity, поэтому нужно сделать игру, которая будет простая, но с одной интересной механикой. Поразмыслив, я решил, что у меня будет персонаж, который движется вперед и прыгает через препятствия. Но затем, я сменил препятствия на специальные «шарики», при поедании которых персонаж увеличивается и уменьшается.
Выглядит довольно просто, теперь осталось нарисовать графику, анимации, меню и прочее. Звучит довольно просто.
Графика
Для рисования пиксель арта я использовал Aseprite. Программа несложная, правда я хотел использовать фотошоп. К сожалению, программа лагает при включении пиксельной сетки.
Далее в поисковике и смотрим картинки, у меня был слайм (слизь). Конечно, ничего оригинального здесь особо не придумаешь, поэтому я решил добавить немного милоты.
В итоге у меня получился вот такой набор:
Настройки для пиксельных картинок. Учите, что Pixels Per Unit — это размер вашей картинки. У меня 16×16.
Префабы
В Unity есть возможность рисовать префабами через Grid. Я перекинул объекты в Prefab и создал там палитру в новом гриде. Теперь открываем новую палитру в редакторе и перекидываем спрайты с префаба в редактор.
Чтобы ровно расположить объекты нужно использовать Box Collider 2D. Затем для рисования используйте GameObjectBrush. Вот подробное видео.
Для грида использую следующие настройки:
Прыжок
Прыжок реализован довольно просто, но с учетом гравитации. Более подробно можно прочитать здесь.
[SerializeField] private int jumpx; [SerializeField] private int jumpy; [SerializeField] public float fallingGravityScale; [SerializeField] private float gravityScale; if (Input.GetKeyDown(KeyCode.Space) < rb.velocity = new Vector2(jumpx, jumpy); if (rb.velocity.y >= 0) < rb.gravityScale = gravityScale; >else if (rb.velocity.y
Звуки
Звуки для игры я брал с сайта, остальное по ключевым словам.
Постпроцессинг
Для игры я использовал постпроцессинг. Его добавлять довольно просто, нужно добавить два компонента и создать профайл.
Для Post-proccess Layer нужно создать новый слой.
Канвас
В проекте у меня несколько канвасов. Для создания функции OnClick нужно перемещать сам конвас на кнопку, чтобы появились методы, которые вы накодили.
«Паралакс» сделал с учетом позиции камеры и скоростью игрока.
public class position : MonoBehaviour < private Transform cameraTransform; public float speed; // Start is called before the first frame update void Start() < cameraTransform = Camera.main.transform; >// Update is called once per frame void Update() < if (cameraTransform.position.x >= 0) < transform.Translate(Vector2.right * speed * Time.deltaTime); >if (player.speed == 0) < speed = 0; >>
Камера
В игре используется плагин Cinemachine, поэтому нужно указать метод обновления камеры. В моем случае Last Update.
Сборка
Когда три уровня было готово, я начал собирать проект. Здесь я столкнулся с одной проблемой — у меня лагала игра. Я не мог понять в чем проблема, но потом выяснил, что в Project Settings — Physics 2D стоит Fixed Update, а у меня все вызовы перемещения через Update, поэтому игра лагала, но не только.
Еще был включен VSync, хотя после переключения в Physics 2D игра стала работать нормально, но я все равно его отключил.
Очень важно при сборке установить минимальное разрешение и режим работы приложения — В Окне. Иначе игра будет запускаться на полный экран т это неудобно. Минимальное разрешение в котором запускался проект — это 1280×720
Иконка
Иконку я делал в midjourney. Потребовалось около 20 генераций, а дальше картинки стали криповыми. Далее отфотошопил, чтобы более подходило по цвету, а так же убрал фон.
Сборка под Linux
Всегда хотел делать игры для линукс, поэтому собрал сборку без труда. Затем установил Ubuntu 22.10 на виртуальную машину (Virtual Box).
В настройках задал общую папку.
Для открытия папки без root потребуется вести команду, потом перезагрузи систему:
sudo adduser game vboxsf
Для запуска игры открой папку через терминал и запустите (файл должен быть исполняемым.)
chmod +x ./файл-игры — делает файл исполняемым.
./файл-игры — запуск игры.
Производительность так себе, учитывая объем памяти, но запуск проверить можно.
Игра
Rumle — это платформер раннер, состоящий из 5 гонок. Прыгай и собирай монетки. Игра полностью бесплатна.
Лучшие комментарии
В проекте у меня несколько канвасов. Для создания функции OnClick нужно перемещать сам конвас на кнопку, чтобы появились методы, которые вы накодили.
Эммммм… что? OnClick у Button’a позволяет вызвать публичные методы скормленного ему Object’a. Это необязательно должен быть именно Canvas. Да и вообще в идеале нужно подписываться и отписываться непосредственно в коде. Тогда если в игре что-нибудь отвалится можно будет быстро найти место возникновения бага, т.к. подписки и отписки будут находится в одном месте, а не будут разбросаны по кнопкам.
Здесь я столкнулся с одной проблемой — у меня лагала игра. Я не мог понять в чем проблема, но потом выяснил, что в Project Settings — Physics 2D стоит Fixed Update, а у меня все вызовы перемещения через Update, поэтому игра лагала, но не только.
Довольно странно, что из-за этого игра лагала. Но менять из-за этого FixedUpdate на Update в Physics2D… Вообще все просчёты физики, перемещения в том числе, выполняют именно в FixedUpdate для того, чтобы симуляция не зависела от FPS. FixedUpdate, в отличие от Update, вызывается фиксированное количество раз в секунду и из-за этого физика рассчитывается адекватно. Перемещения в Update не должны вызывать просадок FPS, вероятно дело в чём-то другом. Если бы я посмотрел весь код, то мог бы предположить почему игра лагала.
void Update()
if (cameraTransform.position.x >= 0)
transform.Translate(Vector2.right * speed * Time.deltaTime);
>
То есть слой «параллакса» будет перемещаться только если изначальная позиция камеры по «x» больше 0 и скорость игрока != 0? В игру не играл, но как понял — игра раннер, где персонаж бежит автоматически. Можно включать «слежение» параллакса за игроком в начале уровня и отключать в конце, либо при проигрыше. Если уровни маленькие, то можно тупо переключить режим отображения спрайта задника на «Tiled» и растянуть на всю длину уровня. Тогда следить вообще не надо будет.
Немного по стилистике кода. Названия классов, публичные поля, коих в идеале быть не должно, свойства, методы и прочее следует называть с заглавной буквы. Приватные же члены должны начинаться с «_» (например «_movementSpeed»).
Ну и в конце субъективная вкусовщина. Прыжок. Лично мне кажется странным трогать гравитацию при расчётах прыжка. Гораздо удобнее вручную рассчитывать velocity у RigidBody. Например вот так:
private async UniTask UpdateAsync(CancellationToken token = default)
while (token.IsCancellationRequested == false)
if (_rigidbody.velocity.y < 0)
_rigidbody.velocity -= _gravityVector * Constants.FALL_MULTIPLIER * Time.fixedDeltaTime;
>
else if (_rigidbody.velocity.y > 0)
_rigidbody.velocity *= Constants.LINEAR_VELOCITY_SLOWDOWN_SPEED;
>
И что по итогу? По итогу поздравляю с первым законченным проектом. Слайм выглядит мило, большинство популярных видосов по Unity стоит смотреть со скепсисом, не переставай пробовать и учиться и в скором времени у тебя начнут получаться потрясающие проекты. Удачи)
Ну что я могу сказать как единственный, наверное, кто поиграл и прошел вообще эту игру)
1) капец как укачивает с такой системой камеры при прыжке, да и в целом слишком близко
2) нужно разрешить нажимать кнопки и мышкой и клавиатурой, а то у тебя запуск игры
3) на эскейп надо нажать минимум 3-4 раза чтобы выйти)
4) слишком большой коллайдер на гг, монеты исчезают еще до его касания
5) мог бы и дать побольше жизней, типо пока они есть — рестарт с начала текущего лвл, когда кончились — рестарт с самого первого
6) монеты по факту не нужны, хоть бы стакал прогресс сбора за все уровни и в конце выдавал бы результат — Круто, ты собрал *число* монеток
7) зря отключил вертикалку, у меня твоё качающееся лого чуток рвалось
8) в игре на полный экран видно, что спрайты хреново апскейлятся и всё выглядит мутновато, ну или ты настроил не минимальное разрешение игры, а закрепил его в 720р, судя по мыльному лого Юнити
9) если подпрыгнуть, то кнопки пропадают и нельзя сменить режим (полный-оконный)
Я абсолютно ничего не понимаю в программировании, посему душнить даже не буду пробовать. Было крайне интересно читать сей текст и даже не столько как лонг_блог (с лонгом ты загнул, конечно), а скорее как личный дневник начинающего разработчика. Даже малость мотивации поймал. Всегда хотелось создать свою небольшую игру, дабы залутать соответствующую ачивку в своём забеге по жизни. Ну это я отошёл от темы.
Пусть критикуют и наводят духоты знающие в коде гейм-девелоперы. Я же поставлю свой лукас за простой, лаконичный и занимательный текст.
Совсем не то. Мало того что страшный «Ынтерпрайз.» это завод по производству пограмистов одной строчки и прочих ультра-узких специалистов, так ещё и рабочих мест то не особо много.
И что бы просто поиграться в кодера как раз инди-геймдев неплохо подходит. Или веб. А дальше человек сам разберётся чего ему от этого всего хочется.
А вообще, в геймдеве деньги есть. Как профессиональный разработчик игр с 10-лентним стажем говорю.
> Как профессиональный разработчик софта
Выглядит симпатично. Но ещё много работы впереди. =) Я бы ещё предложил выкладывать веб-версию на страницу, так больше игроков её запустят. Не все захотят скачивать, распаковывать, запускать (просто лень будет или кто-то скажет «а вдруг вирусы?», и т.п.). Удачи! =)
Красавец. Положено начало хорошему хобби.
Спасибо за блог! Очень классно получилось. Сам пытаюсь изучать # и делать проекты в юньке. Желаю удачи в дальнейшем.
Выглядит очень даже неплохо
Почему не GODOT? Он лучше как по мне подходит для 2д игр
В проекте у меня несколько канвасов. Для создания функции OnClick нужно перемещать сам конвас на кнопку, чтобы появились методы, которые вы накодили.
Канвас должен быть на окне, а не на конпке. На кнопку подписываться лучше в Awake монобеха.
Я зашел на Head Hanter и посмотрел вакансии. А чем я хуже?
Ну… как бы тебе сказать? 🙂 Для начала тем что не знаешь как пишется слово «hunter».
А вообще, за деньгами в геймдев лучше не ходить. В геймдеве денег нет. Как профессиональный разработчик софта с многолетним опытом и сертификатами говорю. За деньгами надо в Ынтерпрайз. Учи жаву или питон, и иди в какой-нибудь сбер.
Я не уверен что в россии остались еще хоть какие-нибудь нормальные программистские конторы, на для начального вкатывания в профессию и сбер сойдет.
Источник: stopgame.ru