Введение.
Современные компьютерные игры интересны и увлекательны, они погружают в виртуальный мир. Когда я увлекся программированием, меня посетила идея, посмотреть мир компьютерных игр изнутри. Я давно хотел создать свою игру и поделиться своими знаниями с окружающими.
Цель: Создание компьютерной игры в наиболее простой платформе.
Задачи:
Изучить историю появления компьютерных игр.
Выбрать платформу для создания игры.
Изучить выбранную программу и коды написания объектов в выбранной платформе.
Создать игру.
Протестировать созданную игру и провести апробацию.
Актуальность: в эпоху информатизации, любой человек, будь то ребёнок или взрослый, погружался в мир компьютерной игры. Каждый выбирает себе игру по интересу: стратегии, аркады, головоломки, симуляторы, экшен проекты, ролевые игры и приключения.
Проблема: современные школьники, очень много времени проводят за компьютерными играми или в сети интернет, потраченное время можно провести с пользой, можно быть не просто потребителем, а создателем.
Гипотеза: предположим, что любой школьник может создать компьютерную игру.
Методы исследования: Поиск информации (в книгах, словарях, энциклопедиях, интернете и т.д.). Анализ информации. Опрос. Сравнение. Обобщение.
Продукт: Игра платформер – главный объект является шарик, при помощи которого за ограниченное время необходимо выжить и собрать максимальное количество монет.
Перечень основных ресурсов: Unity, C#, Arpaint, Windows x64
Срок выполнения: 4 месяца
Ссылка на игру: https://disk.yandex.ru/d/czi5yZSTzlhQWg
Краткая Аннотация:
Название программы |
«Ball a ball» |
Игровой жанр |
Аркада |
Среда программирования |
Поатформа Unity,Visual Studio Code |
Системные требования: |
Windows 10х64 ивыше |
Описание выигрышной стратегии |
Не набирать большую скорость, держаться на одной платформе как можно дольше. |
Компьютерная игра—компьютерная программа, служащая для организации игрового процесса (геймплея), связи с партнёрами по игре, или сама выступающая в качестве партнёра.
В 1952 году была создана первая логическая компьютерная игра «OXO» - компьютерная реализация «крестиков-ноликов» (поле три на три клеточки, пользователь делал свой ход, после этого компьютер делал ответный ход). Игра была создана А.С. Дугласом во время его обучения на докторскую степень в Кембриджском университете (Великобритания). Дуглас писал свою диссертацию на тему взаимодействия человека и компьютера, а игру использовал как наглядную иллюстрацию. Игра существовала в единственном экземпляре на большом компьютере – мэйнфрейме EDSAC.
Самой первой компьютерной игрой стала игра SpaceWar!. Её изобрёл программист Стив Рассел в 1962 году. Жанр: космический симулятор. Платформа: PDP-1.стала первой по-настоящему компьютерной игрой, ведь две предыдущие игры были лишь компьютерной реализацией уже существовавших настольных игр. Эта игра долгое время существовала в одном единственном экземпляре.
В Spacewar участвуют два игрока, каждый из которых управляет своим космическим кораблём. Они маневрируют в невесомости рядом с гравитационным колодцем звезды. Симуляция игрового мира базируется на ньютоновской физике — если игрок не предпринимает каких-либо действий, то корабли движутся по инерции. Если корабль сталкивается со звездой, другим кораблем, или в него попадёт торпеда, то он погибает. Игрок может в любое время использовать функцию перехода в гиперпространство для «прыжка» в случайное место на экране, но такой переход может уничтожить корабль, и с каждым использованием вероятность потери корабля увеличивается. Изначально игра управлялась переключателями на самом PDP-1, но впоследствии Боб Сандерс придумал и создал ранний геймпад, что сделало управление более удобным и улучшило игровой процесс. (Приложение1)
В 1969 год. - программист Кен Томпсон создал видеоигру под названием «Space Travel» для операционной системы (ОС) «Multics». В этой игре моделировалось движение всех планет Солнечной системы, игрок управлял космическим кораблём и должен был аккуратно посадить корабль на одну из планет. Примечательность этой игры в том, что при её портировании на ассемблер, автор начал написание новой ОС «UNIX».
В ноябре 1971 года Нолан Башнелл (Nolan Bushnell) и ТедДабни (TedDabney) создают игру «Computer Space» (модификация «Spacewar» для игровых автоматов). Компания «Nutting Associates» покупает права на игру и выпускает 1500 аркадных автоматов с данной игрой (но продать удалось чуть больше трети всех автоматов). «Computer Space» стала первой компьютерной игрой в мире, изданной для широкой публики.
1980 22 мая создан автомат с игрой «PacMan». Создатель - фирма «Namco». Одна из первых цветных игр (16 различных цветов). Было продано 350 000 автоматов «PacMan».
1980 Японская компания «Nintendo» выпускает небольшие карманные консоли на батарейках и с ЖК-экранами под названием «Game&Watch». (Чуть позже в СССР создают свои копии этих консолей под названием «Электроника ИМ».Самая известная из таких игр – «Ну, погоди!», где волк собирает куриные яйца).
1990-е годы стали временем перехода от двухмерной графики в играх к трёхмерной
В 2000-ые годы продолжалось совершенствование трёхмерной графики игр, приближающей отдельные игры к кинофильмам, и распространение сетевых игр.
Компьютерные игры могут создаваться на основе фильмов и книг; есть и обратные случаи. С 2011 года компьютерные игры официально признаны в США отдельным видом искусства.
Изучая историю компьютерных игр, я наткнулся на игру RedBall, в которую я играл, 8 лет назад, именно она легла в основу создания моей собственной игры «Ball a ball».Игра RedBall – главный персонаж игры является красный шарик, который постоянно движется, преодолевая препятствия, переходя на новый уровень. Она была создана в 2009 году. Мне эта игра понравилась разнообразием ловушек и самой логикой игры.
2. Платформы для создания игр
Платформа |
+ |
- |
Unity |
Бесплатный. Мульти платформенный. Широкий функционал. Простой в освоении. Минимальный вес билда: 10мб. Больше туториалов. Много дополнительных ассетов. |
В старой версии нет русского языка в интерфейсе. Большой вес движка (15-20 Гбайт). |
UnrealEngine |
Бесплатный. Мульти платформенный. Широкий функционал. Минимальный веhttps://ru-wiki.ruhttps://ru-wiki.ruс билда: 80мб. |
Сложный в освоении. Неудобный интерфейс. |
Godot |
Доступен русский язык. Мало весит: ~50мб. Полностью бесплатный. |
Неудобный экспорт проекта. Мало туториалов на русском языке. Отсутствие хорошей документации. |
Construct 3 |
Полностью русифицирован. Удобный интерфейс. |
Платный. Требует очень много ОЗУ. Отсутствие многих плагинов. |
Gamemaker studio 2 |
Мульти платформенный. Удобный интерфейс. Способность рисовать графику в самом движке. Хорошая документация. Много туториалов на русском языке. |
Плохая оптимизация для некоторых платформ. Нельзя создавать 3D игры. Условно-бесплатная (демо 30 дней). Ограничение экспорта. Дорогая подписка. |
Я проанализировал и протестировал программы для создания игр. Рассмотрев все плюсы и минусы, мой выбор пал на Unity, так как он бесплатный, имеет широкий функционал и наиболее прост в освоение, чем остальные платформы. (Приложение 2)
3. Изучение платформы Unity и языка программирования.
Я занялся изучением программы, собрал довольно много информации, просмотрел обучающие видео, прочитал электронную литературу, выбрал наиболее полезные сайты для использования в работе. Но возникли сложности:
Самое главное - недопонимание. Смотря самые первые туториалы я просто копировал код и потом уже сам делал себе пометки что за что отвечает.
Сложность выбора самого языка программирования, т.к. их много и все выполняют разные задачи, некоторые для игр, а некоторые для например программирования робота.
Так как Unity поддерживает только один язык программирования С#, я начал изучение с него.
Этапы изучения С#:
Самое первое я начал знакомиться с переменными, их виды и что они выполняют. Например какая отвечает за текст, за целое число, за дробное число, за какой-либо объект.
String name ‘значение’; – создается текстовая переменная, где name - имя переменной, а значение любой текст.
Int name значение; - целая переменная, где name - имя переменной, а значение любая цифра.
Float name значение; - вещественная переменная, где name - имя переменной, а значение любое дробное число (для системы Windows необходимо разделять дробную часть точкой, а на Android запятой).
2)После изучения переменных я приступил к изучению операторов языка, например if, else, циклы (for, while, continue - наиболее используемые) и т.д.
То есть например если эта переменная в результате сложения получило не то число, то вывести его на экран. Чаше всего для создания игры мне пришлось использовать циклы с условием.
3) В Unity очень много работы с переменными. Например, если хочешь задать главному герою скорость движения, то рекомендуют создать переменную (целое/дробное число), указать его значение, и уже потом присвоить его.
В самом C# unity нет многих функций, какие есть в C#. Не хватило например функции таймер, его сложно запрограммировать (лично для меня).
4. Создание игры
Разобравшись с изучением программы, я приступил к этапу создания самой игры.
Самое первое и самое главное - это придумывание идеи. Часто тратят на это много часов, про что будет игра, какой будет главный герой, какого жанра будет игра и т.д. Так как я только изучаю язык и движок, решил не создавать 3D героев, а использовать простые 2D объекты. Главным героем стал обычный белый шар, который пытается выжить, перемещаясь по платформам и собирающий монетки, за определенное время. Уровней игры 15, с каждым уровнем идёт увеличение времени, от 40-60 сек. В игре есть музыкальное сопровождение (NCS - музыка без авторских прав). Как и в любой аркадной игре, есть магазин, в котором можно приобрести скины для шара.
После того как идея игры и цель разработаны, начинается процесс рисование графики (окружение, главный герой, враги, препятствия) и анимации. Создавать объекты я решил в программе Aseprite. Мне в этой программе нравится пиксельная графика и есть возможность сделать анимацию. Размер всех скинов мячей я выбрал 256х256рх. Остальные объекты я сделал не большие, расширял уже их в самом Unity. (Приложение3).
Скачав с официального сайта Unity, Unityhub, во вкладке версии я выбрал самую последнюю более стабильную версию. Выбрал необходимые плагины для работы: Экспорт на Android, Windows, Linux, а также установил VisualStudioCode для работы с кодом. (Приложение 4)
Во вкладке ПРОЕКТЫ нажал на кнопку «Создать новый проект», выбрал формат 2D, ввёл название и выбрал нужную мне платформу. Нажал ГОТОВО и начался творческий процесс.
После этого идет написание кода. Главному герою даётся управление, врагам - искусственный интеллект, препятствиям то, что герой, когда с ними сталкивается, умирает и т.д.
Герой перемещается при помощи клавиш A и D.
Код для управления главного героя
private void MoveControll()
{ gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(
Input.GetAxis("Horizontal") * pushStrength,
gameObject.GetComponent<Rigidbody2D>().velocity.y);
if (Input.GetKeyDown(KeyCode.Space))
{ gameObject.GetComponent<Rigidbody2D>().AddForce(transform.up * jumpForce * Time.deltaTime);
} }
Код для движения платформы
…
/// Возвращает первый объект из пула
/// </summary>
/// <param name="obj">Пустой объект, в который будет помещен объект из пулла</param>
protected void GetObjectFromStack(out GameObject obj)
{ if (items.Count> 0)
{ obj = items.Pop();
return; }
obj = null;
thrownewUnityException("Stackempty"); }
/// <summary>
/// Добавляет объект в пулл
/// </summary>
/// <remarks> Принимает объект по ссылке</remarks>
/// <param name="obj">Объект, который будет добавлен в пулл</param>
protected void AddObjectToStack(ref GameObject obj)
{ if (obj == null || obj.tag != objectPrefab.tag)
return;
obj.SetActive(false);
items.Push(obj); }
/// <summary>
/// Создаетновыйобъектиз <see cref="objectPrefab">GeneratorBase.objectPrefab</see>
/// </summary>
/// <returns> Новыйекземпляробъекта, полнаякопия <b>objectPrefab</b></returns>
protected GameObject GenerateObject()
{ returnInstantiate(objectPrefab, new Vector3(), new Quaternion()); }
/// <summary>
/// Добавляет новый объект в пулл
/// </summary>
/// <exception cref="UnityException"> Выбрасываетсяеслипуллполный</exception>
public void AddNewObjectToStack()
{ if (items.Count>= objectsInStack)
throw new UnityException("Stack full");
varobj = GenerateObject();
AddObjectToStack(refobj); }
…
Коддляпобедыидляпоражения
...
publicvoidPlayerLost()
{ //TODO: Playerlost
StopAllGameObjects();
Time.timeScale = 0;
lose_panel.SetActive(true);
win_panel.SetActive(false);
isPaused = true; }
publicvoidPlayerWin()
{ // TODO: Playerwin
StopAllGameObjects();
Time.timeScale = 0;
lose_panel.SetActive(false);
win_panel.SetActive(true);
countCoin += PlayerPrefs.GetInt("ccSS");
PlayerPrefs.SetInt("ccSS", countCoin); }
…
Остановка всех объектов при победе или поражении
…
/// <summary>
/// Отключает не нужные игровые объекты
/// </summary>
publicvoidStopAllGameObjects()
{ GameObject.FindGameObjectWithTag("GameManager").GetComponent<PlatformGenerator>().isActive = false; GameObject.FindGameObjectWithTag("GameManager").GetComponent<PlatformWithSpikesGenerator>().isActive = false; GameObject.FindGameObjectWithTag("GameManager").GetComponent<platformWithMineGenerator>().isActive = false; GameObject.FindGameObjectWithTag("GameManager").GetComponent<CoinGenerator>().isActive = false; GameObject.FindGameObjectWithTag("GameManager").GetComponent<accelerationGenerator>().isActive = false; GameObject.FindGameObjectWithTag("GameManager").GetComponent<arrowGenerator>().isActive = false; GameObject.FindGameObjectWithTag("Menu").GetComponent<PauseMenu>().isActive = false;
isPaused = true;
varplatforms = GameObject.FindGameObjectsWithTag("Platform");
varplatformsWithSpikes = GameObject.FindGameObjectWithTag("platformWithSpikes");
varcoins = GameObject.FindGameObjectsWithTag("Coin");
platforms.ToList().ForEach(p =>p.SetActive(false));
coins.ToList().ForEach(c =>c.SetActive(false)); }
После написания всех кодов необходимо проверить на наличие ошибок. Когда все ошибки были исправлены. Я экспортировал проект и выпустил эту игру в бета тестирование. Предложил своим друзьям пройти первый уровень игры, выявились некоторые недочёты, затем второй уровень и так до конца все 15 уровней игры. Все баги я записывал и исправлял их в проекте, затем опять шел процесс экспорта.
И вот, наконец, моя игра готова и увидела свет.
5. Тестирование и апробация.
И вот наконец моя игра готова и увидела свет.
На уроке информатики я выступил со своим проектом, рассказал о процессе создания игры, с какими сложностями я столкнулся. У ребят появился интерес, задавали много вопросов, некоторые изъявили желание попробовать создать игру самостоятельно.
К процессу передачи своих знаний и подошел основательно, составил план. После уроков мы с группой ребят собрались у компьютера, и я подробно объяснил, какие коды являются основными и за что они отвечают. Как правильно написать цикл или условие, так как тему программирование на уроках мы ещё не проходили. Это было самым сложным процессом. Но из 11 человек, удалось более менее понять и вникнуть в весь процесс только одному. Мы решили, что следующую игру мы будем писать совместно. (Приложение 5)
Вывод
Для создания компьютерной игры необходимы базовые знания программирования, так как вся игра в основном строится на циклах и условиях. Не каждый школьник может справиться с созданием игры. Но при огромном желание и усердии добиться результата можно.
Я думаю для новичка, лучше начинать своё игровое творчество именно с движка Unity, русский интерфейс, легкий экспорт, возможность создания игр даже на виртуальную реальность. В интернет есть очень много обучающих видеоматериалов.
Так как мы живём в эпоху информатизации, компьютерные игры уже признаны как отдельный вид искусства. Они популярны среди подростков и взрослых, даже существуют игры направленные на развитие интеллектуального мышления. А в процессе создания самой игры развивается логическое мышление и творческие способности.
На создание своего проекта я потратил около 3 месяцев, из которых месяц ушёл на изучение самого движка и языка программирования. Я очень увлёкся этой работой и в дальнейшем я планирую создать игру головоломку, с применением 3D графикой.
Список используемых источников.
https://ru-wiki.ru
https://unity.com
https://metanit.com
https://www.youtube.com/watch?v=86KLS8das2k
https://www.youtube.com/watch?v=3FWqP80fNJM&list=PL0lO_mIqDDFU66Cwwctcv1C6VNVpaqHfo
https://www.youtube.com/watch?v=wiBYx7n6ey4&list=PL0lO_mIqDDFVNOKquWCHh4n-Ird5HRB_1
https://www.aseprite.org
https://code.visualstudio.com/docs/editor/extension-gallery
https://github.com/aseprite/aseprite/releases
https://assetstore.unity.com
https://t.me/howdyho_official
https://play.google.com/store/apps/details?id=com.FDGEntertainment.redball4.gp&hl=ru&gl=US
https://www.youtube.com/watch?v=6L6NGqsQFGM
https://www.youtube.com/watch?v=GiH2VfEC8II
https://www.youtube.com/watch?v=XGjaxPKE2qo
https://www.youtube.com/watch?v=_CzoyakQDl4
https://www.youtube.com/watch?v=Nak2AOrieTA
https://www.youtube.com/watch?v=5ePtNo5hmxQ
https://www.youtube.com/watch?v=oZ1gmpnQBFg
https://www.youtube.com/watch?v=QpFYZsI36iY
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5