Хочу создать игру с чего начать
Инструкция начинающего разработчика игр
В данной инструкции я попытался осветить основные моменты разработки игр. Инструкция будет полезна для людей, собирающихся заняться разработкой игр в роли лидер а (главного разработчика и организатора).
Хочу отметить, что игры бывают разные – большие и маленькие, сложные и лёгкие, и поэтому для каждой игры эта инструкция верна в какой-то своей определённой степени. Охватить всё не удалось, но передать общие моменты, думаю, получилось.
И так Вы решили сделать свою игру, о чём Вам нужно подумать…
Думаем – нужно ли это тебе
Перед тем, как за что-то взяться, необходимо всё обдумать. А перед тем, как заняться разработкой игр, необходимо обдумать всё очень хорошо. Очень часто начинающие разработчики, достигнув определённых успехов в чём-то (сделал мод для игры, небольшой фан-сайт и пр.), начинают грезить созданием своей игры. Это происходит из-за того, что они имеют слабое представление о процессе разработки игр.
Я перечислю основные ошибки в их представлении:
Концепция и ТЗ
Когда-то давно я написал довольно неплохую статью о концепции проекта. За последние пару лет мои взгляды слегка поменялись, но суть осталась та же.
Контент
Я специально выделил этот раздел, так как он является решающим в процессе разработки игр. Под контентом понимается всё содержимое игры, с которым взаимодействует пользователь. Это графика (растровая, векторная, 3D), музыкальное и звуковое сопровождение, видеоряд, сценарий и текст. Также сюда следует добавить медиаматериалы, используемые для продвижения игры (реклама, банеры и прочие).
В английском языке есть такое понятие как «artist» обозначающие сразу художников, музыкантов, режиссёров, писателей и прочих творцов. К сожалению, в русском языке нет нормального аналога этого слова, поэтому я дальше буду использовать понятие «создатель контента».
Разберём основные моменты этого раздела.
Программирование
Как ни странно, создание программного кода для игр не является самой сложной задачей, но в тоже время и не является простой.
Тестирование
О тестировании начинающие разработчики обычно не задумываются, а зря, так как на него тратиться немногим меньше времени, чем на написание программной части. В этом разделе есть два важных момента:
Организационные моменты
Послесловие
Инструкция получилась большой, материала много. Крайне советую прочесть её начинающим разработчикам игр, так как, возможно, она поможет им избежать ошибок в будущем.
UPD: Статья получилась успешной, даже очень. Но в комментариях прослеживаются замечания по поводу отсуствия романтики и отвращения к играм. Поэтому я прокомментирую эти моменты.
Многие опускают тот факт, что статья для начинающих разработчиков игр, претендующих на роль лидера (первый абзац статьи). Не буду отрицать, что со временем, когда приобретаешь опыт разработки игр и жизнь складывается удачно, возвращается романтика и отвращение спадает. Но в самом начале, когда начинаешь с нуля, после того как столкнёшься с первыми серьёзными проблемами, эта романтика и любовь к играм исчезает ко всем чертям. Разработка игр — это не прогулка по ковровой дорожке в розывых очках, а блуждание в лабиринте Минотавра, где много тупиков.
Я не собираюсь своей статьёй вселять в начинающих разработчиков уверенность. Они должны знать, что путь разработчика игр сложен, что они могут встретить нерешаемые проблемы, что их нерализованный проект будет для них символом поражения.
Как начать писать игры
Путь в индустрию игровых разработок не близок. Эта статья призвана помочь понять с чего лучше начать это путешествие.
Вы только что закончили ваш первый курс по С++ и хотите начать делать игры. Кто-то указал вам на этот сайт и вы, возможно, поэкспериментировали немного с руководством. Вы изучили несколько лаконичных примеров, но не нашли руководства о том, как сделать целую игру. И на то есть причина.
Руководства хороши для обучения чему-то шаг за шагом, например тому, как перемещать изображение точки по экрану. Для того чтобы собрать игру воедино, вам нужны навыки решения возникающих проблем, приобретаемые лишь с опытом. Это не то, чему можно научиться из руководств. Лучший способ научиться делать игры — это начать их делать.
Выбор проекта
Итак, с чем же начать? Проще ответить с чего начинать не стоит, а именно с больших проектов, типа полноценной 3D FPS, MMO или даже длинного платформера 16-битной эпохи. Самая распространенная ошибка начинающих разработчиков это начать с большого проекта основанного на Крутой Идее или взять проект, который кажется простым, и закончить с полузаконченной кучей спагетти-кода. Поначалу следует создавать небольшие проекты.
В ранних проектах ваша основная цель учеба, а не реализация Крутых Идей. Поддерживая проект небольшим, вы можете сфокусироваться на изучении новых техник, а не тратить кучу времени на управление кодом и рефакторинг. Несмотря на то, что ваша Крутая Идея может быть офигительно офигенной, реальность индустрии разработки такова, что чем больше проект, тем больше вероятность совершить ошибку в архитектуре. И чем больше проект, тем дороже обходится эта ошибка. Помните историю Дедала и его сына Икара? Дедал создал крылья из воска и перьев для своего сына. Он предупредил Икара не подлетать на них слишком близко к солнцу. Но Икар проигнорировал предупреждение и крылья расплавились, и тогда-то гравитация и настигла его.
Поэтому помните: не подлетайте слишком близко к солнцу на ваших новых программистких крыльях.
Принимая во внимание все выше написанное, вот пара советов с чего начать.
Графика и обработка событий
Цель вашего первого проекта перейти от консольной разработки к разработки событийных графических приложений. Он так же научит вас фундаментальным основам игровой логики и архитектуры. Я рекомендую что-нибудь пошаговое, потому что игры с движением это совсем другой зверь.
Старайтесь сохранять проект простым, чтобы вы могли его завершить и не потерять интерес на полпути, так никогда и не закончив игру. Важно довести игру до конца, потому что вы не учитесь процессу разработки, если у вас несколько недоделанных игр на жестком диске.
Есть один момент, на который я хочу указать тем, кто будет делать крестики-нолики или четыре в ряд. Не стоит сейчас сильно беспокоиться об искусственном интеллекте. Сделать игру только для двух игроков или для игры с компьютером, который делает случайные ходы вполне достаточно для начала.
Если до этого вы имели дело с графикой и обработкой событий и чувствуете себя комфортно в этой области, можете приступить прямиком к следующему шагу.
Синхронизация, движение, столкновения, анимация
Здесь вы познакомитесь с движением, временем, анимацией, обнаружением столкновений, игровым циклом, вычислениями очков, побед и поражений и другими важными базовыми концепциями используемыми в каждой игре.
Duck Hunt и Pong — хорошие проекты для тех, кто уже имеет опыт в программировании графики и событий. В них есть простое обнаружение столкновений и все важные основы игр в реальном времени.
Space Invaders и Galaga — хороший выбор для второго/третьего проекта. В них есть уровни, поэтому вам нужно будет узнать как передвигаться от уровня к уровню, при помощи конечного автомата. Вы можете прочитать про конечные автоматы здесь(англ.). Игры в стиле «перестреляй их всех» так же требуют создать простые шаблоны поведения для врагов, что является шагом в сторону искусственного интеллекта.
Тетрис хорош для второго/третьего проекта. В нем совсем немного логики нужной для создания игры-головоломки. Это игра приличного размера, так что вам придется научиться разделять вашу программу на несколько исходных файлов, о чем вы можете больше прочитать здесь(англ.). Не недооценивайте Тетрис. Я недооценил и только посмотрите на это жуткое месиво в коде Lazy Blocks.
Переинженеринг
Типичная ошибка новичка это попытка сделать Самую Лучшую Игру Всех Времен, заканчивающаяся переинженерингом. То есть когда он пытается написать самую лучшую игру/движок и это все заканчивается тем, что используется только маленькая часть того что было понаписано.
Когда я был начинающим я переинженерил AI для крестиков-ноликов. Я хотел сделать игру с непобедимым AI. Мне удалось достигнуть этого, запрограммировав компьютер на знание всех возможных ловушек. Звучит круто не правда ли? Это заняло почти 40 000 тысяч строк в основном скопированного кода и месяц моего свободного времени.
Позже я выучил структуры данных и узнал про алгоритм Минимакс, который при меньшем размере кода не только делал нужное, но еще и делал это лучше.
Так что учитесь на моих ошибках и не будьте излишне амбициозны. Концентрируйтесь на обучении тому как делать игры, а не просто делайте их.
Планирование, анализ столкновений, физика, уровни, искусственный интеллект
Теперь, когда у вас за плечами две или три маленьких игры, пришло время сделать первый крупный проект.
До сих пор, вы, вероятно, программировали как придется. Это закончится на этом этапе. В реальном мире большинство процессов разработки завершается до того, как будет написана первая строчка кода. Ничто не может быть хуже, чем осознание того, что для того чтобы добавить в вашу игру то, что вы хотите, вам придется выкинуть весь написанный код, потому что вы не спланировали все заранее. Теперь, когда у вас есть опыт создания игр, вы знаете из чего состоит процесс разработки. Теперь вы можете планировать игры, перед тем как начинать их делать.
Теперь про вашу следующую игру. Break Out и Puzzle Bobble хороши для третьего проекта, потому что они включают в себя продвинутое распознавание столкновений и физику. Физика важна, поскольку дает игре реалистичное ощущение. Даже в Super Mario Brothers есть ощущение гравитации и инерции. Бильярд отличный проект для тех, кто хочет напрячь извилины физикой.
В играх типа бильярда вам нужно не только обнаруживать столкновения, но и обрабатывать их в определенном порядке. Обработка столкновений разительно отличается от их обнаружения. Хотя создание бильярда или 2D платформера может показаться простым делом, анализ столкновений в правильном порядке — запутанный процесс, и не должен быть недооценен.
Break out и Puzzle Bobble так же включают дизайн уровней и требуют загрузки и освобождения их ресурсов. Хорошим опытом будет создание редактора уровней для игры. Редакторы позволяют вам легко создавать уровни и не вынуждают впаивать их в приложение. У меня есть статья(англ.) про создание редактора уровней.
Так же вы возможно хотите попрактиковаться в написании искусственного интеллекта (AI). Один из вариантов — вернуться к крестикам-ноликам или четырем в ряд и написать непобедимый AI. Теперь вы уже должны знать структуры данных и сможете использовать знания о деревьях для использования алгоритма Минимакс. С этим алгоритмом вы можете просчитать все возможные исходы крестиков-ноликов и создать непобедимый AI. Забавно расстраивать им своих друзей. Так же вы возможно захотите сделать разные уровни сложности. Игра не приносит радости, если в нее нельзя выиграть.
Pac Man — отличный способ попрактиковаться в написании AI. Нужно будет знать структуры деревьев/графов и алгоритмы поиска, типа A*, для того чтобы призраки могли пройти через лабиринт. Так же нужно будет сделать чтобы призраки работали в команде. Все это пригодится когда вы будете делать игры со сложным AI, типа стратегий в реальном времени. Об основах AI можно прочитать тут(англ.).
Платформеры, Action/Adventure, RPG, RTS, движки
Теперь, когда вы получили опыт создания хорошо спланированной игры, вы готовы к созданию Action/Adventure/Платформера. Это будет кульминация графики, движения, анимации, анализа/обнаружения столкновений, физики, AI, программной архитектуры и всего остального, что вы изучите к этому моменту. Тем кто более амбициозен, можно предложить сделать стратегию в реальном времени(RTS) или ролевую игру(RPG). Будьте осторожны, потому что RPG и RTS действительно огромные проекты.
RTS также сложны архитектурно, а так же требуют много AI. Вам нужно будет делать поиск пути для юнитов, получение ими команд, разное поведение в зависимости от полученных команд. Если вы никогда до этого не делали AI, будет лучше начать с клона Pac Man’а для начала.
Вероятно вам впервые придется делать движок для вашей игры. Чего следует избегать, так это создания универсального движка. Создавая движок не пытайтесь сделать его подходящем для любой игры. Если ваша игра требует x, y и z, делайте движок который умеет x, y и z. Движки создают исходя из того что нужно для конкретной игры, а не из того что любой игре может потенциально понадобится.
Другая распространенная среди новичков ошибка — это попытка создать движок в качестве первого проекта. И обычно это универсальный движок. Вам не нужен движок с фантастической графикой для создания Pong’а или Space Invaders. Программируя, легко закопаться в деталях. Концентрируйтесь на общей картине и завершайте свои игры.
Кажется все хотят сделать следующую большую MMO. Создание онлайн игр не то, во что можно быстро вникнуть. Я понял это когда попытался сделать онлайн покер сразу после завершения крестиков-ноликов.
Добавление сети значительно усложняет игру. Когда один игрок что-то делает, вы должны послать информацию об этом всем остальным. Это все равно что если бы ваша правая рука не знала о том, что делает левая. Так же вам придется выбирать между загрузкой сервера и тем что он может контролировать. Чем больше делает серверная часть, тем меньше возможностей жульничать у клиента, но это также означает большую нагрузку на сервер. Для action и других игр с высоким темпом геймплея, вам придется беспокоится о сетевой задержке и потере пакетов.
Вам следует полностью закончить хотя бы одну хорошо спланированную игру, перед тем как пробовать делать сетевую игру. В качестве первого сетевого проекта, попробуйте сделать что-нибудь, что не критично к скорости. Например простой чат-сервер/клиент будет хорошей практикой. Так же можно вернуться к крестикам-ноликам/четырем в ряд и добавить в них возможность играть в по сети. Как вариант попробуйте сделать сетевую карточную или настольную игру.
После того как ваш первый сетевой проект готов, попробуйте сделать что-нибудь в реальном времени. В вашем первом сетевом приложении вы, вероятно, использовали TCP, чтобы быть уверенным в том, что данные которые вы принимаете доходят в том порядке, в котором вы их посылали. Для игр в которых происходит много действий, задержки создаваемые TCP вероятно будут слишком велики, так что вам придется использовать UDP. UDP не гарантирует порядок доставки как и саму доставку вообще. Так как UDP не делает дополнительных проверок целостности он быстрее. Вам придется пожертвовать легкостью использования TCP, в обмен на скорость UDP и необходимость самостоятельной проверки целостности данных при создании игры.
3D игры
Перед тем как делать 3D игры, вам следует сделать хотя бы одну хорошо спланированную игру и иметь хорошее понимание трехмерной векторной математики, линейной и Ньютоновской физики. Тут вам придется иметь дело с вершинами, текстурами, освещением, тенями, опредением взаимодействия с объектами в трехмерном пространстве, загрузку моделей и прочими сложно звучащими вещами.
Хорошая новость в том, что если вы уже сделали 4 или 5 игр, вы уже знаете основы необходимые для создания игры. Вы уже хорошо знакомы с процессом разработки и знаете свои возможности как программиста. Неважно трехмерный шутер или двухмерный, он по прежнему шутер. 2D RPG или 3D RPG по прежнему RPG.
Не считайте это оправданием пропустить 2D и сразу перейти к 3D. Прежде чем научиться бегать, нужно научиться ходить.
С чего начать создание своей игры?
Как два с половиной года геймдизайна позволили мне увидеть короткий путь к первой игре для начинающих разработчиков и энтузиастов
Полезные советы и инструкцию для разработки первой игры я оставлю в видео, в этой же статье расскажу о том где я начинал делать игры до того как стал геймдизайнером и открыл для себя Unity и C# для прототипирования.
Итак, топ-3 странных способа сделать игру:
1) Power Point (да, та самая программа для презентаций от Microsoft)
Наверняка и вам доводилось делать игры в приложениях, которые для этого не предназначены. А может быть вы использовали редакторы игр, которые просто не выдерживали и ломались под тяжестью и гениальностью ваших идей. В любом случае это интересно, обязательно расскажите 😅.
С чего начать создание своей игры?
*Листок меняем на комп/ноут, карандаш меняем на любой более-менее поддерживаемый движок/конструктор*
В смысле, а как же «бумажный прототип»?
Ядерный Ганди это не кор, и даже в «цифровом прототипе» это отследить было бы невозможно, потому что там сделаны были бы 1-2 варианта правителя с минимальным, общим для всего класса, функционалом, по которому можно было бы снять вертикальный срез игры.
Ганди недоработка, но не на уровне ядра игры или прототипа, а на уровне реализации объекта класса.
По фактам разъебал.
Тыб хотя бы погуглил, что это такое. Это мало того, что общепринятая в гейдизайне практика, так она ещё и не уникальна для создания игр.
Да и в твоём определении «прототипа» в трёх местах перепутаны причина и следствие.
ДОЛЖЕН БЫТЬ хуже конечного изделия, страшнее, менее эффективным
Нет, прототип должен воспроизводить основные характеристики объекта, с которого делается модель. То, что ты назвал, следствие того, что «страшнее и эффективнее» — качественные показатели, которые на этапе прототипа не важны.
Человек решил экспертом притвориться, а ты вот так с ним. Жестоко.
Ммм, ставим минусы, бравируем.
Сразу видно серьезного человека, да еще и эксперта.
Ну что ж, в игнор.
На что только не пойдёшь, чтобы люди, читающие комментарии, не дай б-г не восприняли то, что ты тут написал, всерьёз. Всего хорошего.
Хороший, грамотный, взвешенный подход восприятия аргументированной доказанной критики, когда несёшь чушь. Реакция страуса.
Ну да, откуда инженеру с двенадцатилетним стажем знать, что такое прототип
Круто, наверное. Апелляция к своему авторитету. Но ты сказал херню, которая отношение к реальности имеет опосредованное. И даже по твоему «должна быть страшной», бумажный прототип проходит. Потому что он, как правило, страшный.
Тип, модель может быть любой, лишь бы она описывала основные свойства натурного объекта. Она может быть математической, программной, бумажной, физической, да какой угодно. Лишь бы варьирование признаков было можно производить.
Ты сам-то хоть открывал эту статью?
Да. Я тебе показал, сколько лет этот метод прототипирования существует, и что он существует вообще. Дальше открываешь почти любую книгу по геймдизайну и смотришь как там люди обращаются с этим видом прототипов, даже картинки скину.
История знавала случаи когда некоторые знаковые игры вообще за столом в кафе придумывали, из салфеток и вилок.
Общепринятая в геймдизайне и разработке ПО терминология
Не знать что вещь вообще значит, но бухтеть какая она плохая, и, вообще, так быть не может
«Короче, как всегда, понапридумывали своей терминологии и рады»
Да, действительно пора заканчивать этот разговор.
Геймдев для чайников или как в одиночку сделать игру
Начало пути. Идея и графика
Все началось в декабре 2016-го года, когда я встретился с тремя бывшими одногруппниками.
Мы заговорили за настоящее, кто кем работает, чем занимается, и конечно же заговорили про будущее.
Так вышло, что я графический дизайнер, двое других программисты (C# и Swift), а четвертый «перспективный».
Четвертый рассказывал про то, какие огромные возможности в этом мире и бла бла бла… И в этот момент меня осенило. Я за столом с двумя программистами, почему бы не объединиться и не сделать что-то свое? Вот так и появились первые мысли о геймдеве.
Первую неделю после встречи мы обсуждали идеи, определились с одной и я приступил к графике. Графику делал в векторном редакторе Adobe Illustrator, чтобы в любой момент можно было изменить разрешение, так как мы еще не совсем понимали какое именно разрешение нам нужно.
Набросал графику и на следующий же день один из программистов говорит, что не хочет продолжать, так как нашел занятие поинтереснее. За ним сливается и второй.
И тут я понял, что у меня появилась мечта и она начинает отдаляться.
Новый год — новые силы. Программирование
Наступил новый год и я понял, что опускать руки не стоит и нужно самому довести начатое до конца. И сразу наткнулся на Corona SDK — кроссплатформенное решение для 2D игр. Есть возможность делать на PC, Android, при наличии Xcode и на Mac, iOS.
Я не программист, по этому начал проходить туториалы прям на их сайте, очень удобно и информативно. Так я познакомился с языком программирования Lua, именно на нем придется писать, если решил использовать Corona SDK. Язык несложный, скриптовый. Lua широко используется в геймдеве для написания уровней и всяких расширений, в том числе и в игре World of Warcraft он активно используется. Статья «Lua за 15 минут» поможет быстро разобраться с языком.
Прошел все туториалы и принял решение сначала делать под Android. Ибо у меня PC, а не Mac, да и устройств на Android в наличии было аж 4, в то время как яблочных девайсов у меня нет.
Месяца мне хватило, чтобы с консультациями от моего хорошего друга программиста (не одногруппника) набросать функционал игры. Советы он давал ценные, по этому мы стали партнерами.
Дайте больше шума. Музыка и звуки
Игра все больше становилась похожа на готовый продукт. И вот я нахожу подходящие звуки, но их длительность меня не устраивала, на помощь пришел Audacity. Подрезав звуки и переделав их в wav, я получил нужные мне звуковые эффекты. Сразу после этого нашлась и музыка, это был ambient с бесплатной лицензией, который пошел на резку в Audacity и был зациклен. Таким образом музыка в игре занимает меньше мегабайта и состоит из одного трека и нескольких звуков.
Важно: Бесплатные звуки и музыка должны иметь соответствующую лицензию на использование, это может быть как полностью бесплатная лицензия без указания автора, так и лицензия Creative Commons, которая позволяет бесплатно использовать, загружать и даже изменять произведения, но автора стоит указать в credits/титрах.
Звон монет и шепот денег. Монетизация
Стал вопрос о монетизации. Игра бесплатная, простая, без внутренних покупок, по этому оставался только вариант с рекламой. На Android, да и на iOS с этим проблем нет, к тому же Corona SDK поддерживает самые популярные рекламные плагины. Мой выбор пал на Appodeal. Он работает со всеми крупными сетями мобильной рекламы, для того чтобы показывать только самую дорогую рекламу внутри приложения.
В игре использовал межстраничное объявление и видео за вознаграждение. То есть игрок сам решает, смотреть ему видео или нет, если да, то он получает вознаграждение, в моем случае он получает возможность продолжить с того же места, на котором проиграл. А вот межстраничное объявление игрок увидит после каждого проигрыша, как по мне, это не мешает игровому процессу.
Игровые сервисы. Тестирование и первая публикация
Игру планировал выпустить сразу на двух торговых площадках — Google Play и Amazon. На первой аккаунт разработчика стоит 25$, а на второй бесплатно. По этому начал именно с Amazon. К тому же у меня 2 планшета от Amazon и мне близка их экосистема.
Для списка лидер ов и достижений у Amazon есть Game Circle, у Google — Google Play Games Services. Проблем ни с одним, ни с другим не возникло, так как документации у Corona SDK по ним предостаточно.
На этапе тестирования дал друзьям поклацать игру, замечания себе выписал, внес поправки, а для отслеживания ошибок использовал adb logcat. Исправил баги и 6-го марта игра увидела свет на Amazon.
5 звезд на Amazon. Создание промо ролика. Публикация на Google Play
После двух положительных оценок на Amazon сразу же купил аккаунт разработчика в Google Play, цена вопроса 25$. Это пока единственные затраты на игру.
Принялся за создание промо ролика для игры. Выбор пал на Adobe After Effects, так как мне близки продукты от Adobe. Честно скажу, не было опыта в создании видео, но у меня как-то быстро получилось разобраться и на видео потратил всего день. Просто очень хотелось поскорее опубликовать игру в Google Play.
И вот момент истины, промо ролик готов, аккаунт куплен, осталось заполнить описание игры, нажать на кнопку и просто ждать.
Спустя несколько часов я получил уведомление, что игра опубликована. Это было 19-е марта 2017-го года.
Выводы
Для разработки под iOS все тоже самое, но нужен Mac с Xcode, яблочные устройства для тестирования, а за аккаунт разработчика нужно платить 99 долларов каждый год, а это уже не 25$ за Google Play. По этому если все таки речь идет о геймдеве с минимальными вложениями, то либо Amazon, где вообще платить не надо, либо Google Play, с его четвертью Франклина.
Так в одиночку, используя кроссплатформенный движок на простом и понятном для начинающих языке Lua и с минимальными затратами за 3 месяца можно с нуля сделать игру и выпустить ее. Верьте в себя и общайтесь с людьми, которые связаны с геймдевом, community очень помогает.
Удачи в начинаниях и доводите проект до конца, ибо только так можно чему-то научиться и получить опыт.