ЧАСТЬ 2. ПРОГРАММНЫЙ КОД ИГРЫ




ИССЛЕДОВАТЕЛЬСКИЙ ПРОЕКТ ПО ИНФОРМАТИКЕ

«Создание компьютерных игр в среде UNITY»

 

Автор проекта:

Плахтиенко Кирилл Сергеевич

Ученик 9 класса МКОУ СОШ №13 имени Федора Ивановича Фоменко

Руководитель: Князев Олег Анатольевич, учитель физики и информатики МКОУ СОШ №13 имени Федора Ивановича Фоменко

 

 

2020г.

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ 3
ЧАСТЬ 1. ОСНОВЫРАБОТЫВ ПРОГРАММЕ UNITY 4
1.1 ОКНО ПРОГРАММЫ 4
2.2 СОЗДАНИЕ ПРОЕКТА 6
ЧАСТЬ 2. ПРОГРАММНЫЙ КОД ИГРЫ 9
ЗАКЛЮЧЕНИЕ 12
ЛИТЕРАТУРА 13
ПРИЛОЖЕНИЕ №1 ПОЛЕЗНЫЕ ССЫЛКИ 14

 

 

ВВЕДЕНИЕ

 

Unity3d является современным кросс-платформенным движком для создания игр и приложений, разработанный Unity Technologies. С помощью данного движка можно разрабатывать не только приложения для компьютеров, но и для мобильных устройств (например, на базе Android), игровых приставок и других девайсов.
Для того чтобы создать свою игру, вам, как минимум, нужно владеть одним из доступных (на Unity) языков программирования: C#, JavaScript или Boo.

Актуальность данной работы заключается в том, что в последнее время Unity развивается стремительными темпами, привлекая все больше новых разработчиков. На базе этого движка были созданы такие популярные игры, как Ori and the Blind Forest (разработчик: Moon Studios), Cities: Skylines (разработчик: Colossal Order), Dungeon of the Endless (разработчик: Amplitude Studios), а также мобильная версия Hearthstone: Heroes of Warcraft (разработчик: Blizzard Entertainment) [1]. Кроме того, Unity используется для создания приложений, связанных с архитектурой, обучением, визуализацией данных, электронными книгами и многими другими отраслями [3]. Так при съемках фильма Книга джунглей (2016, режиссёр: Джон Фавро) приложение на базе Unity Engine использовалось для визуализации в режиме реального времени перемещения по сцене и работы с освещением.

Изучение данной программы поможет мне освоить новые языки программирования и продвинуться на пути к моей цели – стать программистом.

Целью моей работы является изучение основ программирования в среде Unity.

Задачи:

1. Ознакомиться с основами работы в рабочей среде Unity.

2. Написать программный код для компьютерной игры.

 

 

ЧАСТЬ 1. ОСНОВЫРАБОТЫВ ПРОГРАММЕ UNITY

ОКНО ПРОГРАММЫ

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

Unity дает возможность разработчикам создавать игры. И, что самое важное, для создания интересных игр не нужны годы опыта в программировании или диплом художественного вуза. Нужно изучить лишь горстку основных понятий в Unity. Стоит с ними разобраться, и вот уже незаметно и создана первая игра. И время сэкономленное на создании и запуске игры можно будет использовать для ее улучшения, правки баланса и доведения до идеала [2].

Начнём с простого – с внешнего вида программы. Нельзя просто так взять и создать что-то в программе, если вы видите её в первый раз. Для начала нужно всё осмотреть, привыкнуть к расположению окон, оценить количество всевозможных менюшек и кнопок. Расположение по умолчанию windows дает вам практический доступ к наиболее распространенным окнам. Если вы еще не знакомы с различными окнами в Unity, вы можете определить, по имени на вкладке. Наиболее распространенные и полезные окна показаны ниже в позициях по умолчанию [4]:

Рабочее окно Unity разбито на 6 взаимосвязанных областей. (По умолчанию в Unity включается вид «Default» или «Tall». Если у вас другой вид рабочего окна, то можете переключить его в меню «Layout» в верхнем правом углу окна) Рис.1.

Рис.1 Рабочее окно Unity

Таблица 1. Перечень всех рабочих областей окна Unity:

 

1. Main menu (Главное меню) Строчка текста сверху, где располагаются все команды, доступные в программе. Многие команды продублированы кнопками и меню в рабочих областях, поэтому главное меню не обязательно использовать.
2. Project View (Обзор проекта) Список, в котором показаны все используемые файлы в игре: файл сцены, файл программного кода, графические и аудиофайлы.
3. Hierarchy (Иерархия) Список, где перечислены все объекты, добавленные на сцену. Здесь можно работать с объектами, копировать их, переименовывать, удалять.
4. Scene (Сцена) Область, где отображается игровой мир или игровая сцена. Здесь мы можем добавлять новые объекты, перетаскивать их, менять вид.
5. Game (Игра) Область предпросмотра, где видно, как сцена будет выглядеть в игре. Здесь можно настраивать различные настройки экрана и видеорежима.
6. Inspector (Инспектор) Список, состоящий из нескольких различных по виду разделов. Показывает все свойства выбранного объекта: размеры, модели, текстуры, скрипты.

СОЗДАНИЕ ПРОЕКТА

 

После запуска Юнити, в меню выбираем «File -- New Project » (файл – создать проект).

В появившемся окне выбираем место на жестком диске, где сохранить проект. Рекомендуем написать путь к папке как можно короче, например: C:/Project_1.

Ниже в окне есть список, в котором можно выбрать стандартные дополнительные пакеты для игры, но для первого проекта нам пока ничего не нужно. (Любая лишняя библиотека, добавленная в проект, увеличит размеры конечной игры).

В нижней части окна выбираем двухмерную игру «Setup defaults for: 2D ».

После этого нажимаем кнопку «Create project » (создать)(Рис.2).

 

Рис.2 Окно для создания нового проекта

 

2. Перед нами открывается окно Юнити, состоящее из нескольких зон. Расположение зон можно сразу же настроить под себя в разделе «View» главного меню, поэтому ориентироваться будем не по сторонам экрана, а по названиям рабочих зон Юнити.

 

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

 

3. Создадим четкую иерархию проекта, создав папки для каждого вида файлов:

1). В окошке «Project » в его левом верхнем углу нажимаем кнопку «Create ».

2). В появившемся списке выбираем «Folder » (папка). В корневой папке «Assets» появится новая папка.

3). Создаём папки, называем их так:

Animation (анамация объектов),

Prefabs (префабы – массивы объектов),

Scripts (скрипты – программный код),

Sounds (звуки – для звукового сопровождения игровых действий),

Sprites (спрайты – изображения для игровых объектов)

(Созданные папки можно переименовывать и перемещать в любое время с помощью перетаскивания элементов в окошке «Project») [5]/

4). Вот так должен выглядеть конечный результат нашей операции (Рис.3)

 

Рис.3 Окно - обзор проекта

В графическом редакторе рисуем объекты и фон для игры и помещаем их в папку Sprites.

Для того, чтобы заставить игровые объекты двигаться, нам нужны скрипты. Скрипты – это своеобразные логические команды, которые предписывают объектам, как им себя вести в той или иной ситуации. В Unity можно писать скрипты на следующих языках программирования: C#, Boo, UnityScript. Мы будем использовать язык C#, так как он принадлежит к серии самых популярных языков программирования.

В программном коде мы должны оперировать различными классами объектов. Описания классов содержатся в специальных библиотеках. Вот эти библиотеки мы и подключаем к нашему коду командой «using».

В библиотеке «UnityEngine» содержатся описания всех стандартных объектов внутри движка Unity (объекты, их свойства, файлы, префабы, система наследования, связи между объектами).

В библиотеке «System.Collections.Generic» содержатся простейшие логические конструкции (классы, списки, перечни, массивы, таблицы, векторы), а так же источники внешних данных для нашей будущей игры (нажатие клавиш клавиатуры, кнопок мыши, свойства экрана).

С помощью скриптов программы набираем программный код игры. Сохраняем изменения в скрипте. Можем сделать это, нажав комбинацию клавиш «Ctrl + S».

Настроим управление объектами игры. В свойствах каждой переменной-кнопки «Up Button», «Down Button», «Left Button», «Right Button» в строчке «Size» ставим значение «2». После этого появляются два списка «Element 0» и «Element 1», в них выбираем те клавиши, которые будут соответствовать этой переменной. Для «Up Button» это «UpArrow» (клавиша со стрелкой вверх на клавиатуре) и «W». В итоге мы должны назначить переменным все кнопки-стрелки и клавиши «W, A, S, D», как это показано на рисунке. (Открыв список, на клавиатуре можно нажимать клавишу с первой буквой названия клавиши, чтобы быстро найти её в огромном списке).

Таким образом управление перемещением у нас будет продублировано и на «стрелочках» и на буквенных клавишах, а игрок уже сам будет выбирать, чем ему пользоваться.

Сохраняем файл скрипта, возвращаемся в окно Юнити, сохраняем сцену. Теперь можем запустить нашу игру. Нажимаем клавишу «Play» в верхней части экрана для включения игры. (Для отключения игры снова нажимаем по клавише «Play» (Рис.4).

Рис.4 Запуск игры

 

 

ЧАСТЬ 2. ПРОГРАММНЫЙ КОД ИГРЫ

 

using UnityEngine;

using System.Collections;

 

[RequireComponent(typeof(Rigidbody2D))]

 

public class Player2DControl: MonoBehaviour {

 

public enum ProjectAxis {onlyX = 0, xAndY = 1};

public ProjectAxis projectAxis = ProjectAxis.onlyX;

public float speed = 150;

public float addForce = 7;

public bool lookAtCursor;

public KeyCode leftButton = KeyCode.A;

public KeyCode rightButton = KeyCode.D;

public KeyCode upButton = KeyCode.W;

public KeyCode downButton = KeyCode.S;

public KeyCode addForceButton = KeyCode.Space;

public bool isFacingRight = true;

private Vector3 direction;

private float vertical;

private float horizontal;

private Rigidbody2D body;

private float rotationY;

private bool jump;

 

void Start ()

{

body = GetComponent<Rigidbody2D>();

body.fixedAngle = true;

 

if(projectAxis == ProjectAxis.xAndY)

{

body.gravityScale = 0;

body.drag = 10;

}

}

 

void OnCollisionStay2D(Collision2D coll)

{

if(coll.transform.tag == "Ground")

{

body.drag = 10;

jump = true;

}

}

 

void OnCollisionExit2D(Collision2D coll)

{

if(coll.transform.tag == "Ground")

{

body.drag = 0;

jump = false;

}

}

 

void FixedUpdate()

{

body.AddForce(direction * body.mass * speed);

 

if(Mathf.Abs(body.velocity.x) > speed/100f)

{

body.velocity = new Vector2(Mathf.Sign(body.velocity.x) * speed/100f, body.velocity.y);

}

 

if(projectAxis == ProjectAxis.xAndY)

{

if(Mathf.Abs(body.velocity.y) > speed/100f)

{

body.velocity = new Vector2(body.velocity.x, Mathf.Sign(body.velocity.y) * speed/100f);

}

}

else

{

if(Input.GetKey(addForceButton) && jump)

{

body.velocity = new Vector2(0, addForce);

}

}

}

 

void Flip()

{

if(projectAxis == ProjectAxis.onlyX)

{

isFacingRight =!isFacingRight;

Vector3 theScale = transform.localScale;

theScale.x *= -1;

transform.localScale = theScale;

}

}

void Update ()

{

if(lookAtCursor)

{

Vector3 lookPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.z));

lookPos = lookPos - transform.position;

float angle = Mathf.Atan2(lookPos.y, lookPos.x) * Mathf.Rad2Deg;

transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

}

if(Input.GetKey(upButton)) vertical = 1;

else if(Input.GetKey(downButton)) vertical = -1; else vertical = 0;

 

if(Input.GetKey(leftButton)) horizontal = -1;

else if(Input.GetKey(rightButton)) horizontal = 1; else horizontal = 0;

 

if(projectAxis == ProjectAxis.onlyX)

{

direction = new Vector2(horizontal, 0);

}

else

{

if(Input.GetKeyDown(addForceButton)) speed += addForce; else if(Input.GetKeyUp(addForceButton)) speed -= addForce;

direction = new Vector2(horizontal, vertical);

}

 

if(horizontal > 0 &&!isFacingRight) Flip(); else if(horizontal < 0 && isFacingRight) Flip();

}

}

 

using UnityEngine;

using System.Collections;

 

public class NewLevel2: MonoBehaviour {

 

// Use this for initialization

void Start () {

 

}

 

// Update is called once per frame

void Update () {

 

}

void OnTriggerEnter2D(Collider2D coll)

{

if(coll.transform.tag == "Portal2")

{

Application.LoadLevel("Level3");

 

}

if(coll.transform.tag == "Portal3")

{

Application.LoadLevel("Level4");

}

}

}

 

 

ЗАКЛЮЧЕНИЕ

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

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

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

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

Таким образом, Unity является отличной программой для новичков, которые не имеют большой команды людей, но хотят начать создавать игры и зарабатывать на них деньги.

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

Теперь я, с заложенной базой знаний, могу спокойно приступать к созданию своего ультра-популярного приложения!

ЛИТЕРАТУРА

1. https://studwood.ru/690098/informatika/aktualnost_raboty

2. https://habr.com/ru/post/161463/

3. https://studbooks.net/2014752/informatika/aktualnost_raboty

4. https://docs.unity3d.com/Manual/index.html

5. https://gamesisart.ru/game_dev_unity_2.html

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: