Магістерська дисертація

158
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ «КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ імені ІГОРЯ СІКОРСЬКОГО» Факультет електроніки _ (повна назва інституту/факультету) __ Кафедра звукотехніки та реєстрації iнформацiї (повн «На правах рукопису» УДК 681.3.06 а назва кафедри) «До захисту допущено» Завідувач кафедри (підпис) (ініціали, прізвище) 2019 р. Магістерська дисертація спеціальність 171 Електроніка (код і назва спеціальності) на тему: «Дослідження технологій створення освітніх комп’ютерних ігор» Виконав студент ___II курсу, групи ДВ-82мп (шифр групи) Науковий керівник_ Костюкевич Максим Георгійович (прізвище, ім’я, по батькові) (підпис) асистент к.т.н., Філіппова Н. Ю. (посада, науковий ступінь, вчене звання, прізвище та ініціали) (підпис) Консультант 3 ст.викладач Батіна О.А. (назва розділу) (науковий ступінь, вчене звання, , прізвище, ініціали) (підпис) Рецензент (посада, науковий ступінь, вчене звання, науковий ступінь, прізвище та ініціали) (підпис) Засвідчую, що у цій магістерській дисертації немає запозичень з праць інших авторів без відповідних посилань. Студент (підпис) Київ – 2019 року

Transcript of Магістерська дисертація

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ

«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ

імені ІГОРЯ СІКОРСЬКОГО»

Факультет електроніки _

(повна назва інституту/факультету)

__ Кафедра звукотехніки та реєстрації iнформацiї (повн

«На правах рукопису»

УДК 681.3.06

а назва кафедри)

«До захисту допущено»

Завідувач кафедри

(підпис) (ініціали, прізвище)

“ ” 2019 р.

Магістерська дисертація

спеціальність 171 Електроніка

(код і назва спеціальності)

на тему: «Дослідження технологій створення освітніх комп’ютерних ігор»

Виконав студент ___II курсу, групи ДВ-82мп

(шифр групи)

Науковий керівник_

Костюкевич Максим Георгійович (прізвище, ім’я, по батькові) (підпис)

асистент к.т.н., Філіппова Н. Ю. (посада, науковий ступінь, вчене звання, прізвище та ініціали) (підпис)

Консультант 3 ст.викладач Батіна О.А. (назва розділу) (науковий ступінь, вчене звання, , прізвище, ініціали) (підпис)

Рецензент (посада, науковий ступінь, вчене звання, науковий ступінь, прізвище та ініціали) (підпис)

Засвідчую, що у цій магістерській

дисертації немає запозичень з праць інших авторів без відповідних

посилань. Студент

(підпис)

Київ – 2019 року

Національний технічний університет України

«Київський політехнічний інститут

імені Ігоря Сікорського»

Інститут (факультет) Факультет електроніки _

(повна назва)

Кафедра Кафедра звукотехніки та реєстрації інформації (повна назва)

Рівень вищої освіти – другий (магістерський) за освітньо-професійною

програмою

Спеціальність(освітня програма) 171 Електроніка (Електронні системи мультимедія та засоби Інтернету речей)

(код і назва)

ЗАТВЕРДЖУЮ

Завідувач кафедри

(підпис) (ініціали, прізвище)

«_ » 2019р.

ЗАВДАННЯ

на магістерську дисертацію студентці Костюкевичу Максиму Георгійовичу

(прізвище, ім’я, по батькові)

1. Тема дисертації: Дослідження технологій створення освітніх

компютерних ігор.

науковий керівник дисертації: Філіпова Наталія Юріївна к.т.н.,асистент.

(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)

затверджені наказом по університету від «07» листопада 2019р. №3859-с

2. Строк подання студентом дисертації 10.12.2019р.

3. Об’єкт дослідження: освітні комп’ютерні ігри, засоби розробки освітніх комп'ютерних ігор, розробока відеогри на Unity3D

4. Предмет дослідження: методи та технології розроблення освітньої

комп’ютерної гри

Програмне забезпечення Unity3D, JavaScript, C#, Android, iOS, Microsoft Visual Studio онлайн-платформа Classtools.net,

5. Перелік завдань, які потрібно розробити: провести огляд засобів

розробки освітніх комп’ютерних ігор та дослідити застосування Unity3D

для розробки освітньої ігри-квеста із застосуванням геолокаційниого

сервісу..

6. Перелік графічного (ілюстративного) матеріалу 52 рис., 21 табл., 1

презентація, 10 слайдів.

7. Орієнтовний перелік публікацій:«Особливості створення комп’ютерних

ігор з прив’язкою до об’єктів реального світу і карти» /М.Г. Костюкевич/;

«Перспективні напрямки розвитку засобів розробки комп’ютерних ігор

компанії UNITY»/М.Г.Костюкевич/ Науково-технічна конференція

«Сучасні проблеми застосування електронних та інформаційних

технологій в телекомунікаціях, телебаченні та цифровому

кінематографі».

8. Консультанти розділів дисертації

Розділ Прізвище, ініціали та посада

консультанта

Підпис, дата

завдання видав

завдання прийняв

3 Батіна О.А.

9. Дата видачі завдання 10.09.2018

Календарний план

Студент

М.Г. Костюкевич

(підпис) (ініціали, прізвище)

Науковий керівник дисертації Н.Ю.Філіппова (підпис) (ініціали, прізвище)

Консультантом не може бути зазначено наукового керівника

№ з/п

Назва етапів виконання магістерської дисертації

Строк виконання етапів магістерської дисертації

Примітка

1 Написання першого розділу: «Історія розвитку освітніх комп'ютерних ігор».

10.10.2018

2 Написання другого розділу: «Розробка комп'ютерних ігор».

15.12.2018

3 Написання третього розділу: «Розробка відеогри на Unity3D».

01.05.2019

4 Тестування гри з третього розділу 10.10.2019

5 Написання четвертого розділу: «Розроблення стартап-проекту».

09.11.2019

6 Підготовка матеріалів до друку та оформлення пояснювальної записки

25.11.2019

7 Підготовка та оформлення презентації для доповіді

30.11.2019

УДК 681.3.06

РЕФЕРАТ

Магістерська дисертація: 154с., 52 рис., 21 табл., 2 дод., 24 джерела.

КОМП’ЮТЕРНІ ІГРИ, РЕДАКТОР ДЛЯ РАЗРАБОТКИ ИГР, ЗАСОБИ

РОЗРОБКИ, ГРАЛЬНІ РУШІЇ, РОЗРОБЛЕННЯ ІГОР, ПЛАТФОРМА,

МОВА ПРОГРАМУВАННЯ, UNITY3D, UNREAL ENGINE.

Актуальність роботи. Протягом останнього часу дуже стрімко

розвиваються індустрія навчальних комп'ютерних ігор. і у розробників ігор

з'явилося більше можливостей, актуальною стає неформальна освіта, яку

студенти можуть отримати використовуючи ігрові платформи. Це призводить

до нового розуміння ролі університетської освіти і свободи для творчості.

Тому у цій дипломній роботі розглянуто сучасні технології для розробки

навчальних ігор, визначено критерії вибору вірного інструменту для розробки

ігор задля спрощення програмування і скорочення термінів розробки

програмної частини.

Обґрунтування необхідності проведення дослідження. Дослідження є

доцільним оскільки все більш актуальним стає неформальна освіта, яку люди

отримують поза інституціональних структур, використовуючи відкриті

освітні ресурси (ВОР) та платформи ігрового навчання. Це призводить до

нового розуміння ролі університетської освіти.

Мета і задачі дослідження. Метою роботи є обґрунтування вибору

програмного забезпечення щодо створення та реалізації освітніх ігор, для

досягнення поставленої мети потрібно вирішити наступні завдання:

− дослідити сучасні освітні ігрові середовища;

− проаналізувати технології для їх створення;

− дослідити різновиди ігрових движків для різних платформ;

− ознайомитись з інструментарієм Unity 3D;

− розробити освітню ігру типу Pokemon Go для оцінювання знань з

предметної області на движку Unity 3D і на платформі Google Maps;

Об’єкт дослідження. Об’єктом дослідження є ігрові освітні технології

і способи їх створення та реалізації на прикладі обраної предметної області.

Предмет дослідження. Предметом дослідження є методи та технології

розроблення та реалізації освітніх ігор.

Методи дослідження. Методом дослідження є порівняльний аналіз

способів реалізації різних провідних компаній у сфері освітніх комп’ютерних

ігор.

Практичне значення одержаних результатів. Отримані результати

можна використати для оцінювання знань студентів, а також в якості

навчального посібника для комп’ютерних практикумів з дисципліни

«Технології проектування доповненої реальності і освітніх комп’ютерних

ігор».

Апробація результатів дисертації. Використано в комп’ютерних

практикумах з дисципліни «Технології проектування доповненої реальності і

освітніх комп’ютерних ігор».

Публікації. Публікація тез доповіді на тему «Перспективні напрямки

розвитку засобів розробки комп’ютерних ігор компанії UNITY» в збірнику тез

Науково-технічної конференції «Сучасні проблеми застосування електронних

та інформаційних технологій в телекомунікаціях, телебаченні та цифровому

кінематографі» травень 2019 р., «Особливості створення комп’ютерних ігор з

прив’язкою до об’єктів реального світу і карті» в збірнику тез Науково-

технічної конференції «Сучасні проблеми застосування електронних та

інформаційних технологій в телекомунікаціях, телебаченні та цифровому

кінематографі» грудень 2019 р.

SUMMARY

Master's dissertation: 154 p., 52 pic., 21 tabl., 24 sources.

COMPUTER GAMES, GAME EDITOR, GAME DEVELOPMENT, GAME EN-

GINE, PLATFORM, PROGRAMMING LANGUAGE, UNITY3D, UNREAL EN-

GINE.

Relevance of work. The computer gaming industry has been developing very

rapidly lately. and game developers have more opportunities, non-formal education

that students can get using gaming platforms is becoming relevant. This leads to a

new understanding of the role of university education and freedom for creativity.

Therefore, this work examines modern technologies for the development of educa-

tional games, defines the criteria for choosing the right tool for game development to

simplify programming and shorten the development of software.

Substantiation of necessity of carrying out research. Research is appropri-

ate, as the non-formal education that people receive outside institutional structures is

increasingly relevant, using open educational resources (VOPs) and game-learning

platforms. This leads to a new understanding of the role of university education.

The purpose of the work is to research modern tools for the development of

educational computer games based on the analysis of the most important characteris-

tics and to develop a game on the Unity 3D engine.

To achieve this goal, you must perform the following tasks:

- explore modern educational game environments;

- analyze technologies for their creation;

-explore game engine variants across platforms;

- familiarize yourself with the Unity 3D toolkit;

- develop a Pokemon Go educational game to evaluate domain knowledge on

the Unity 3D engine and the Google Maps platform.

Object of study. The object of study is game educational technologies and

ways of their creation and implementation on the example of the chosen subject area.

Subject of study. The subject of research are the methods and technologies of

designing and implementing educational games.

Research methods. The research method is a comparative analysis of ways to

implement various leading companies in the field of educational computer games.

The practical significance of the results obtained. The results obtained can

be used to evaluate students' knowledge as well as a tutorial for computer aids in the

augmented reality design and educational computer games discipline.

Testing the results of the work. Used in computer workshops on the subject

of augmented reality technology and educational computer games

ЗМІСТ

Перелік умовних позначень та скорочень………………………………….…11

Вступ……………………………………………………………………………12

РОЗДІЛ 1 ІСТОРІЯ РОЗВИТКУ ОСВІТНІХ КОМП'ЮТЕРНИХ ІГОР….....15

1.1 Аналіз ігрових можливостей в освіті…. ………………………...……15

1.2 Характеристики комп’ютерних ігор і їх класифікація ……………..20

1.2.1 Опис класифікації ігор за ігровою платформою …………..…...20

1.2.2 Опис класифікації комп’ютерних ігор за графікою………….....22

1.2.3 Огляд класифікації комп’ютерних ігор за змістом….…………..23

1.2.4 Опис класифікації ігор за видавничими критеріями…..…...…...28

1.2.5 Опис класифікації ігор за типом їх розповсюдження………..…29

1.2.6 Опис класифікації ігор за кількістю гравців…..…………….…..30

1.3. Програмні сервіси та платформи, що мають потенціал для

геймифікації навчання…………………………………………………….31

РОЗДІЛ 2 РОЗРОБКА КОМП'ЮТЕРНИХ ІГОР ……………………….…....36

2.1 Основні етапи розробки комп'ютерної гри ………………….………..36

2.2 Поняття ігрового рушія…………………………………………...……39

2.3 Характеристики ігровіх рушіїв………………………………………..41

2.4 Засоби розробки комп'ютерних ігор і їх інтеграція ……………..……44

2.4.1 Unity…………………………………………………..……..45

2.4.2 MoneGame / XNA………………………………………......47

2.4.3 Unreal Engine………………………………………………..46

2.4.4 Construct 2……………………………………………..…....46

2.4.5 Blitz3D…………………………………………………………...47

2.4.6 UDK (Unreal Development Kit) ……………..……………..48

2.4.7 Рушій для мобільної платформи……………….….………48

2.4.8 Конструктори ігор…………………………….……………49

2.5 Застосування технологій доповенної реальності……………………..50

2.6 Особливості розробки ігор на Unity 3D………………………………..55

2.6.1. Огляд ігрового рушія Unity 3D………………………………55

2.6.2. Недоліки та переваги Unity 3D………………….……..……..56

2.6.3.Інтерфейс Unity3D …………………………………………....60

2.6.4. Вибір мови програмування міжплатформена середа

розробоки ………………………………………………..……61

РОЗДІЛ 3 РОЗРОБКА ВІДЕОГРИ НА UNITY3D …………………..............64

3.1. Планування проекта типу Pokémon GO ……………….…………..….64

3.1.1 Що уявляє з себе Pokémon GO………………….…………….…64

3.1.2 Підготовка до розробки додатку на кшталт Pokémon GO………66

3.2. Розробка гри «Іспит, граючи»………………………………………...70

3.2.1 Концепція гри …………………………………………………….70

3.2.2 Процес розробки гри на движку Unity. Створення карти….....72

3.2.3 Отримання координат гравця (location service)……...…………78

3.2.4 Розміщення точок на карті…………………………..…………...85

3.2.5 Доповнена реальність без міток…………………………………98

3.2.6 Анімація персонажа…………………………………………......105

3.3. Графичний інтерфейс користувача (GUI) в Unity…………………...107

РОЗДІЛ 4. РОЗРОБЛЕННЯ СТАРТАП-ПРОЕКТУ ЗА ТЕМОЮ

МАГІСТЕРСЬКОЇ

ДЕСЕРТАЦІЇ…………………………………………………….110

4.1 Опис ідеї проекту……………………………………………....….110

4.2 Технологічний аудит ідеї проекту………………………………..111

4.3 Аналіз ринкових можливостей запуску стартап проекту…...….112

4.4 Розроблення ринкової стратегії проекту………………………...116

4.5 Розроблення маркетингової програми стартап проекту………..118

ВИСНОВКИ ................................................................................................... 121

ПЕРЕЛІК ДЖЕРЕЛ ПОСИЛАННЯ .............................................................. 123

ДОДАТОК А. ABSTRACT ............................................................................ 125

ДОДАТОК Б. Скрипти .................................................................................. 129

ДОДАТОК В. Перелік вільних і комерційних движків ігор ....................... 152

11

ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ ТА СКОРОЧЕНЬ

GUI – graphical user interface – графічний користувальницький

інтерфейс;

IDE – – integrated development environment – інтегроване середовище

розробки;

JDK – java development kit – комплект засобів розробки Java;

NDK – Android native development kit – пакет інструментаріїв і

бібліотек, що дозволяє реалізувати частину програми на мові

С/С++;

SDK – software development kit – комплект засобів розробки (Android)

SSAO – screen space ambient occlusion – програмна техніка (методика) в

тривимірній комп'ютерній графіці, яка є наближеною імітацією

глобального освітлення

12

ВСТУП

Ігрові технології займають важливе місце в навчальному процесі. Ігрові

технології пов'язані з ігровою формою взаємодії викладача і студента через

реалізацію певного сюжету (ігри, казки, спектаклі, справа-ше спілкування). При

цьому освітні завдання включаються в зміст игри. В освітньому процесі

використовують цікаві, театралізовані, ділові, рольові, комп'ютерні ігри.

Розробкою теорії гри, її методологічних основ, з'ясуванням її соціальної природи,

значення для розвитку учня займалося чимало учених. Реалізація ігрових прийомів

у навчанні відбувається за такими основними напрямками:

• дидактична мета ставиться перед учнями у формі ігрової задачі;

• навчальна діяльність підкоряється правилам гри;

• навчальний матеріал використовується в якості її засобу, в навчальну діяль-

ність вводиться елемент змагання, який переводить дидактичну задачу в ігрову;

• успішне виконання дидактичного завдання зв'язується з ігровим ре-зультатом.

Ігрові технології не тільки сприяють вихованню пізнавальних інтересов і

активізації діяльності учнів, а й виконують ряд інших функцій: 1) правильно

організована з урахуванням специфіки матеріалу гра тренує пам'ять, допомагає

учням виробити мовні вміння і навички; 2) гра стимулює розумову діяльність

учнів, розвиває увагу і пізнавальний інтерес до предмету; 3) гра - один з прийомів

подолання пасивності учнів. Функція гри - її різноманітна корисність. У кожного

виду гри своя корисність

Ігри пройшли довгий шлях становлення від найпростішіх двоколірніх 2D ігор

до сучасних 3D ігор з високим рівнем графіки. Центральним програмним

компонентом комп'ютерних ігор є ігровий рушій. Він забезпечує основні

технології, спрощує розробку і часто дає грі можлівість запускатіся на декількох

платформах, таких як ігрові консолі та настільні операційні системи, наприклад,

GNU / Linux, Mac OS X і Microsoft Windows.

13

Unity це мультиплатформенний ігровий движок для розробки двох-і

тривимірних ігор, що працюють під операційними системами Windows OS X,

Windows Phone, Android, Apple IOS, Linux, а також на ігрових приставках Wii,

PlayStation 3, PlayStation 4, Xbox 360, Xbox One. Є можливість створювати додатки

для запуску в браузерах за допомогою спеціального модуля Unity (Unity Web

Player), а також за допомогою реалізації технології WebGL (програмна бібліотека,

що дозволяє створювати на JavaScript інтерактивну 3D-графіку). Unity підтримує 2

сценарних мови JavaScript, C #.

14

1 ІСТОРІЯ РОЗВИТКУ ОСВІТНІХ КОМП'ЮТЕРНИХ ІГОР

1.1 Аналіз ігрових можливостей в освіті

Найбільший інтерес, в освітньому процесі, представляють ігрові технології,

так як вони не тільки сприяють вихованню пізнавальних інтересів та активізації

діяльності учнів, а й виконують ряд інших функцій: 1) правильно організована з

урахуванням специфіки матеріалу гра тренує пам'ять, допомагає учням виробити

мовні вміння і навички; 2) гра стимулює розумову діяльність учнів, розвиває увагу

і пізнавальний інтерес до предмету; 3) гра - один з прийомів подолання пасивності

учнів. Функція гри - її різноманітна корсиність. У кожного виду гри своя

корисність. Найбільш важливі функції гри:

Соціокультурний призначення гри. Гра - найсильніший засіб социаліза-ції.

Функція міжнаціональної комунікації. Ігри національні й у той же час

інтернаціональні, міжнаціональні, загальнолюдські. Ігри дають можливість

моделювати різні ситуації життя, шукати вихід з конфліктів, не вдаючись до

агресивності, учать розмаїтості емоцій у сприйнятті всього існуючого в житті.

Функція самореалізації людини в грі. Для людини гра важлива як сфера реалізації

себе як особистості. Саме в цьому плані їй важливий сам процес игри, а не її

результат, конкурентність або досягнення будь-якої мети.

Комунікативна гра. Гра - діяльність комунікативна, хоча за чисто ігровим

правилам і конкретна.

Діагностична функція гри. Гра має прогностичність; вона діагностичніша, ніж

будь-яка інша діяльність людини, по-перше, тому, що індивід поводиться в грі на

максимумі проявів (інтелект, творчість); по-друге, гра сама по собі - це особливе

«поле самовираження».

Ігротерапевична функція гри. Гра може і повинна бути використана для

подолання різних труднощів, що виникають у людини в поведінці, в спілкуванні з

оточуючими, у вченні

15

Функція корекції у грі. Корекційні ігри здатні надати допомогу учням з

поведінкою, що відхиляється, допомогти їм впоратися з переживаннями, що

перешкоджають їх нормальному самопочуттю і спілкуванню зі свсрсниками в

групі.

Розважальна функція гри. Розвага - це потяг до різного, різноманітного.

Розважальна функція гри пов'язана зі створенням певного комфорту, сприятливої

атмосфери, душевної радості як захисних механізмів, тобто стабілізації

особистості, реалізації рівнів її притязань. Розвага в іграх - пошук. Гра має магію,

здатну давати їжу фантазії, виводити на розважальність.

В останнє десятиліття в педагогічній літературі з'явилося багато визначень

гри. Наприклад, цікаво визначення гри у Г.К.Селевко «Гра - це вид діяльності в

умовах ситуацій, спрямованих на відтворення і засвоєння суспільного досвіду, в

якому складається й удосконалюється самоврядування поведінкою» [3].

Авторитетом в узагальненні зв'язку між людством і грою є відомий філософ

ХХ століття Йохан Хейзінга, який написав книгу під назвою "HOMO LUDENS"

(людина граюча) [4]. Він розглянув процес життєдіяльності через гру. Гра

розглядається як найважливіша характеристика людини, як культурної істоти.

Проводячи докладне дослідження позначення гри на різних мовах (японській,

латинській, семітському, німецькій та ін.), Він відзначає, що в деяких мовах

(грецькій, китайській та ін.) такого слова немає, а є лише різні слова для визначення

ігор, наприклад, змагальні ігри, ігри-вистави, азартні ігри і т.п.

Слід зазначити, що наукового єдиного загального для всіх визначення игри в

літературі немає досі.

Розглянемо найбільш відомі підходи до гри в історичному аспекті. К.Гросс

розвиває свою теорію як теорію вправ, вважаючи, що у вищих живих істот,

особливо у людини, природжені реакції ... є недостатньо розвиненими, тому

людині дано особливо довге дитинство для підготовки до життя за допомогою

наслідування звичок, здібностей старшого покоління.

16

Альтернативною позицією на теорію К.Гросса була теорія гри Ф.Бойтендайка,

який критикував і заперечував Гроссу. Його теорія полягала в тому, що інстинкти

дозрівають незалежно від вправ, які він не вважав грою [6].

Філософський аналіз гри в роботах Х.-Ґ.Ґадамера, І. Канта, Ф. Шіллера та ін.

розглядається як зображення, а не як переживання. Гра своєрідна тим, вважали

вони, що має межі зображуваного і реального [8,9].

Сутність гри полягає в тому, що в ній більше важливий не результат, а сам

процес переживань, пов'язаних з ігровими діями. При цьому, по-перше, важливий

сам досвід переживання позитивних почуттів для людини, по-друге, через

переживання тільки й можна виховати позитивне ставлення до діяльності. Гра має

багаті можливості сформувати позитивне ставлення і до неігрової діяльності.

Більшості ігор властиві чотири головні риси [16]:

- це вільна розвиваюча діяльність, що здійснюється лише за бажанням, заради

задоволення від самого процесу діяльності, а не тільки від результату (процедурне

задоволення);

- це творчий, значною мірою імпровізований, дуже активний характер цієї

діяльності («поле творчості»);

- це емоційна піднесеність діяльності, суперництво, змагальність,

конкуренція, атракція (чуттєва природа гри, «емоційне напруження»);

- це наявність прямих або непрямих правил, що відображають зміст гри,

логічну та часову послідовність її розвитку.

В структуру гри як діяльності, органічно входить цілепокладання, планування,

реалізація мети, а також аналіз результатів, в яких особистість повністю реалізує

себе як суб'єкт. Педагогічна наука пред'являє певні вимоги до організації гри в

процесі навчання [17]:

- кожна гра повинна містити елемент новизни;

17

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

учасники повинні мати можливість відмовитися від гри, якщо вона їм не

подобається, і вибрати іншу гру;

- гра - не урок, що включає учнів в нову тему, елемент змагання, загадка,

подорож в казку і багато іншого, - це не тільки методичне багатство вчителя, а й

загальна, багата враженнями робота на занятті;

- гра - засіб діагностики, учень розкривається в грі у всіх своїх кращих і не

кращих якостях;

- гра повинна ґрунтуватися на вільній творчості і самодіяльності учнів; це

неозначає, що учасники гри не мають ніяких обов'язків; учні часто ставляться до

цих обов'язків більш відповідально, ніж до навчаньної або трудової діяльності;

- гра повинна викликати в учнів тільки позитивні емоції, тобто веселий настрій

і задоволення від вдалої відповіді; гри повинаі бути доволі доступні і привабливі;

мета гри повинна бути досяжною, а її оформлення - барвистим і різноманітним;

- в грі обов'язковий елемент змагання між командами або окремими

учасниками, що значно підвищує самоконтроль учнів, привчає їх до чіткого

дотримання встановлених правил, а головне, добре активізує діяльність;

завоювання перемоги або чийсь виграш дуже сильно спонукає учня до подальших

дій; не завжди переможцями гри стають успішні учні; часто багато терпіння і

наполегливості в грі проявляють ті, у кого цих якостей не вистачає для

систематичного приготування уроків;

- гра повинна враховувати вікові особливості учнів: необхідно враховувати,

який матеріал цікавий і характерний для якого класу;

- емоційний стан вчителя повинен відповідати тій діяльності, в якій він бере

участь; гра вимагає особливого стану від того, хто її проводить; необхідно не тільки

вміти проводити гру, але і грати разом з учнями;

Виходячи із завдань, що визначають ігрову діяльність, слід зазначити найбільш

значущі принципи ігрової діяльності:

18

активність - основний принцип ігрової діяльності, що виражає активний прояв

інтелектуальних сил, починаючи з підготовки до гри, в процесі і в ході обговорення

її результатів;

відкритість і доступність гри означає вільну участь бажаючих, і будь-яка гра

повинна бути проста і зрозуміла;

динамічність виражається в значення і вплив фактора часу, тривалість-

залежить від віку учнів і рівня їх підготовленості;

наочність означає, що всі ігрові дії повинні бути в реальних і ірреальний

(комп'ютерні ігри) проявах тієї чи іншої дійсності, що значно посилює

пізнавальний інтерес;

цікавість і емоційність відображаються в захопливості і цікавих проявах ігрової

діяльності, що значно посилює пізнавальний інтерес;

індивідуальність відображає суто особисте ставлення до гри, коли розвиваю-

ються особистісні якості, що відкриває можливість для самовираження і

самоствердження гравця;

колективність відображає спільний характер взаємопов’язаної і вза-

імозалежної ігрової діяльності, вона сприяє розвитку товариських взаємин, вчить

мислити і діяти спільно;

цілеспрямованість відображає єдність мети для гравця і його суперника;

особисті цілі повинні збігатися з загальними цілями команди;

самодіяльність і самостійність - один з головних принципів, що містить

функцію управління яка виражається в співвідношенні між мірою самодіяльності і

самостійності;

змагальність і змагання в грі спонукає до активної самостійної діяльності,

мобілізує фізичні, інтелектуальні та душевні сили;

результативність - це усвідомлення підсумків ігрових дій, як продуктивну

творчу діяльність гравця і команди;

достовірність і повторюваність гри проявляється в тому, що майже всі вони

мають в своїй основі реальні моделі і ролі. Це дозволяє повторити минуле і

19

«відкрити» визначеність майбутнього. Тому гра є потужним засобом

прогнозування;

проблемність у грі висловлює логіко-психологічні закономірності мислення в

інтелектуально-емоційної боротьбі.

1.2 Характеристики комп’ютерних ігор та їх классифікація

Фахівці з ігрових технологій в освітній практиці пропонують таку класифікацію

ігор:

по області діяльності: 1) фізичні, 2) інтелектуальні, 3) трудовы, 4) соціальні, 5)

психологічні;

за характером педагогічного процесу: 1) навчальні, тренінгові, контролюючі,

узагальнюючі, 2) пізнавальні, виховні, розвивальні, 3) репродуктивні, продуктивні,

творчі, 4) комунікативні, діагностичні, профорієнтаційні, психотехнічні;

по ігровій методиці: 1) предметні, 2) сюжетні, 3) рольові, 4) ділові, 5) імітаційні,

6) драматизації;

по предметної області: 1) математичні, хімічні, біологічні, фізичні, екологічні,

2) музичні, театральні, літературні, 3) трудові, технічні, виробничі, 4) фізкультурні,

спортивні, військово-прикладні, туристичні, народні, 5) суспільнознавчі,

управлінські, економічні, комерційні;

по ігровому середовищу: 1) без предметів, з предметами, 2) настільні, кімнатні,

вуличні, на місцевості, 3) комп'ютерні, телевізійні, технічні засоби навчання (ТСН),

4) технічні, із засобами пересування.

1.2.1 Опис классифікації ігор за ігровими платформами

20

Комп'ютерна гра - форма розвивально-розважально] взаємодії користувача і

комп'ютера, що імітує в віртуальному просторі життєві і уявні ситуації, що має

значний jcdsnysq потенціал, який полягає в стимулюванні пізнавального інтересу.

Основним способом поділу відеоігор на категорії є поділ по платформах,

який вказує, на якому пристрої можна запустити ту чи іншу гру. Якщо у

користувача немає платформи, для якої призначена гра, то і пограти в неї він не

зможе.

Персональний комп'ютер (ПК, PC, ноутбук, нетбук)

Перелік найбільш популярних серій комп'ютерних ОС: Windows (від фірми

Microsoft), Mac OS (від фірми Apple), Linux (безкоштовна ОС, розроблювана

світовою інтернет-спільнотою).

Ігрова консоль або приставка (PS, Xbox, Nintendo)

До найбільш популярних поколінь консолей можна віднести: Sony

PlayStation (PSP, PSOne, PS2, PS3, PS4), Microsoft Xbox (Xbox, Xbox 360, Xbox

One), Nintendo 3DS, Wii.

Мобільний пристрій: телефон, планшет, кишеньковий комп'ютер (КПК,

PDA)

На застарілих телефонах гри є java-додатки, на сучасних телефонах ігри

запускаються під мобільними ОС: Windows Mobil і Android. Для поширення

мобільних ігор створені цілі глобальні сервіси типу App Store, Google Play.

Планшет, сенсорний мобільний телефон. Окремою категорією йдуть

планшети і телефони з можливістю сенсорного введення (натисканням пальцями

по екрану). Особливий спосіб введення даних дозволяє створювати гри з

унікальних-ним геймплеєм, що використовують ці особливості, наприклад,

малювання на екрані, нахил пристроїв для зміни гравітації в грі і т. д.

Ігровий автомат

Браузерна або флеш-гра (віртуальна інтернет платформа)

Браузерні ігри - ігри, здатні запускатися у вікні браузера (програми для

перегляду інтернет-сторінок). Особливий пристрій браузерних ігор дозволяє грати

21

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

браузери: Google Chrome, Opera, FireFox, Edge, Safari - підтримують запуск

невеликих програм прямо внутр. інтернет-сторінок [23].

1.2.2 Опис класифікації комп’ютерних ігор за графікою

Класифікація по розташуванню ігрової камери. Розташування точки, з якої

ми дивимося на ігровий світ, тісно пов'язане з жанром гри.

В якихось жанрах простіше дивитися від імені героя, в якихось – бажано

бачити все з боку, а десь - зручно спостерігати за ситуацією з висоти пташиного

польоту. У деяких іграх є можливість змінювати вид ігрової камери прямо під час

процесу гри [23].

Вид від 1-ої особи (вид з очей). Використовується в жанрах: екшен, шутер,

комп'ютерна рольова гра (РПГ, RPG, Role-Playing Game), симулятор, гонки.

Вид від 3-ї особи (вид спозаду використовується в жанрах: екшен, шутер,

РПГ, симулятор, гонки, слешер, файтинг, 3D-платформер.

Двомірний вид збоку (2D вид збоку). Використовується в жанрах: платформ-

мер, головоломка, файтинг, 2D екшен.

Тривимірний вид збоку (3D вид збоку, псевдотривимірний).

Використовується в жанрах: платформер, квест, головоломка, файтинг, 2D екшен.

Двомірний вид зверху (2D TopDawn). Використовується в жанрах: стратегія,

РПГ, тактика, головоломка, логічні ігри.

Тривимірний вид зверху (3D TopDawn, ізометрія). Використовується в жан-

рах: стратегія, РПГ, тактика, головоломка, логічні ігри.

Класифікація за технологією графіки. Зовнішній вигляд – головна прикраса

гри. Багато недосвідчеихі гравців при виборі гри орієнтуються саме на графіку,

тому існує поділ ігор за типом і якістю графічного зображення.

Відсутність графіки (текстові ігри, псевдографіка)

22

Двомірна графіка (векторна, растрова). 2D-графіка - найбільш натуральний

вид графіки. Зображення складені з окремих пікселів - кольорових квадратів. Так

само існує технологія векторних зображень, при якій об'єкти складаються не з

пікселів, а з точних геометричних координат, що з'єднуються лініями. Такий

вигляд зображень дозволяє відмальовувати більш плавні лінії, без пікселізації. При

збільшенні зображення не псується його зовнішній вигляд.

Тривимірна графіка. Завдяки застосуванню тригонометричних формул у

розробників ігор з'явилася можливість створювати ілюзію трьохвимірного світу,

що відображається на двомірної площини екрану. На сьогоднішній день 3D-

графіка - найпопулярніший формат графіки в комп'ютерних іграх.

Об'ємне зображення (стерео-окуляри). Об'ємність зображень - це невелике

поліпшення 3D-графіки. Технологія стерео-зображення поки не доведена до

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

використовується в комп'ютерних іграх.

Доповнена реальність (мобільні пристрої з відеокамерою). Подібні ігри

доступні лише на мобільних пристроях з відеокамерою.

Віртуальна реальність (шолом віртуальної реальності). Має на увазі повне

занурення гравця у віртуальний світ, коли гравець відчуває, що в відеогру

поміщено все його тіло, всі його органи чуття. Розвиток гри до повноціної

віртуальної реальності (ВР) на сьогоднішній день неможливо.

1.2.3 Обзор класифікації комп’ютерних ігор за змістом

Класифікації по жанру

Ігровий жанр - група ігор, які мають схожу ігрову механіку і схожі правила

гри. Існує велика кількість ігрових жанрів і кожен з них характеризується певними

властивостями. Для того, щоб зрозуміти до якого жанру буде відноситися будь-яка

гра, потрібно «розкласти» гру на її складові частини і визначити їх зв'язки один з

одним.

23

Для спрощення процесу визначення жанру було створено «Схему жанрів».

Рисунок 1.1 — Зовнішній вигляд схеми жанрів

Вся схема розділена на 15 вертикальних смуг. 15 смуг розгруповані на 3

великі групи ігор - «Ігри інформації», «Ігри дій», «Ігри контролю». У нижній

частині кожної смуги вказана її сутність - базовий (неподільний) жанр, який можна

назвати одним словом. Всі назви сутностей: навчання, загадки, спілкування, герой,

вивчення світу, збирання, ухиляння, знищення, змагання, техніка, турбота,

розвиток, мікроконтроль, тактика, планування.

За цим поділом ігор виділяють 3 основних групи: рольова, бойовик і

стратегія. Внаслідок того, що критерії приналежності гри до того чи іншого жанру

не визначені однозначно, класифікація комп'ютерних ігор недостатньо

систематизована, і в різних джерелах дані про жанр конкретного проекту можуть

розрізнятися. Існує безліч ігор, що несуть в собі якості декількох жанрів.

Класифікація комп’ютерних ігор по жанру:

1. Action:

• 3D-шутер, «бродилки-стрілялки»:

o шутери від першої і третої особи;

o «криваві/ м’ясисті» шутеры;

o тактичні шутеры;

24

• файтінги:

o побий їх усіх;

o слэшер;

o аркада;

o стелс-екшен.

2. Симулятори/менеджери:

• технічні;

• аркадні;

• спортивні;

• спортивній менеджер;

• экономічні.

3. Стратегії:

• стратегії по схемі ігрового процесу:

o стратегії в реальному часі;

o покрокові стратегії;

o карткові стратегії.

• стратегії по масштабу ігрового процесу:

o варгеймы;

o глобальні стратегії;

o симулятори бога.

4. Пригоди — текстова пригодницькая гра.

5. Графічний квест:

• головоломки;

• пригодницький бойовик;

• симулятор побаченнь;

• візуальна новела.

6. Музичні ігри — ритмічні ігри.

7. Ролеві ігри — тактичні е РПГ.

8. Головоломки, логічні, пазли.

25

9. Традиційні і настольні.

10. Текстові — ігри в псевдографиці.

Класифікація по сеттінгу

Сеттінг (від англ. «Setting» - обстановка, декорація, антураж) - ігровой світ,

місце і час, в якому відбувається дія художньо твору. Автори можуть комбінувати

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

фентезі світ в Епоха кіберпанку; міфології різних країн в одному світі; «Гостьові»

персонажі з інших всесвітів.

За місцем дії (тип вигаданого світу):

• реальний світ (ігровий світ мало чим відрізняється від нашого світу);

• паралельні світи (реальний світ і переходи в спотворені світи);

• альтернативна історія (інші варіанти історичних подій);

• фентезі (казковий світ з наявністю магії);

• геройська міфологія (надістоти: супергерої, мутанти, напівбоги);

• християнська міфологія (ангели, демони, рай, пекло);

• сучасна міфологія (навала зомбі, нашестя інопланетян,

постапокаліпсіс).

За часом дії (історична епоха):

• зародження життя (найпростіші організми, ігри на клітинному

рівні);

• доісторичні часи (ера динозаврів, печерні люди);

• зародження цивілізацій (Стародавній Рим, Стародавній Єгипет);

• середньовіччя (лицарські походи, міжусобиці, інквізиція);

• епоха колонізації (морські подорожі, нові землі);

• епоха індустріалізації (XVIII-XIX століття, стімпанк);

• минулі війни (Друга Світова війна, локальні конфлікти);

• наш час (звичний світ);

• інформаційна епоха (кіберпанк, антиутопія майбутнього);

• освоєння космосу (наукова фантастика, SciFi, космічні подорожі);

26

• еволюція (наявність декількох епох в одній грі).

За умовами всередині світу:

• місце з певною культурою (дикий захід, витончений схід),

арабські країни, бананова республіка, тоталітарна держава);

• певна кліматична зона (Арктика, тундра, лісостеп, пустеля, узбережжя,

гори, повітряний світ, водний світ, підводний світ, підземний світ);

• наявність катаклізму (навала зомбі, прибульців);

• хоррор (лякає, напружена атмосфера).

Класифікація за метою гри

Казуальна (повсякденна) гра (насолода самим процесом) .. Гра побудована

так, що її можна тимчасово перервати в будь-який момент, а потім продовжити.

Часто процес гри розділений на невеликі рівні (приклад: Angry Birds, Plants vs

Zombies) (рисунок 4).

Рисунок 1.2 — Ігровий процес гри «Plants vs Zombies»

Гра-пісочниця (творчі можливості, вибір цілей). Ігри без сюжета і цілей.

Основою гри-пісочниці є різноманітні ігрові можливості, які гравець може

застосовувати на власний розсуд. Досить часто пісочниці, це не окремі ігри, а

спеціальні режими в сюжетних іграх (приклад: Grand Thief Auto, Minecraft,

SimSity) (рисунок 5).

27

Рисунок 1.3 — Ігровий процес ігри «Minecraft»

Гра-змагання (дуель, чемпіонат, суперництво). Гра, в якій гравці змагаються

між собою за статус переможця. приклад: StarCraft 2, Counter Strike, Battlefield).

Навчальна гра (отримання нових знань). Це загальні ігри для дітей або вузько

спеціалізовані симулятори для дорослих. В процесі гри в ігровій формі подається

інформація для вивчення.

Хардкорні (дуже складна) гра (поліпшення ігрових навичок). Гра, створена

спеціально для досвідчених гравців, для випробування їх ігрових навичок.

Гра на проходження (виконання цілей, сюжет). У сюжетній грі все ігрові

завдання взаємопов'язані між собою, слідують одна за одною, утворюючи лінію

сюжету.

1.2.4 Опис класифікації ігор за видавничими критеріями

Клссифікація по бюджету розробки

Від того, які фінанси вкладені в гру, залежить її зовнішній вигляд,

проробленість деталей, різноманітність ігрових можливостей.

Професійна гра (гри із середнім бюджетом). Ігри, створювані

професіоналами, але без використання величезних бюджетів. В таких іграх менше

лиску, обмежене число спецефектів, різноманітних декорацій, але в цілому,

відчувається професійний підхід.

28

Інді-гра (незалежна гра, малобюджетний клас). Ігри, створювані одним

автором або невеликою групою. Інді-автори - це частіше за все професіонали в

своїй справі, у них виходять відмінні гри. Єдиний мінус - при створенні інді-ігор

не витрачаються кошти на покупку стороніх фахівців, все створюється самостійно.

Любительська гра (безкоштовна гра з мінімальним якістю). Зараз існує

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

гри може зайнятися навіть студент або школяр, що впевнено розбирається в

комп'ютерах, але, наприклад, нічого не знаючий про ігровий баланс, дизайні та

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

Класифікація по видавничому формату

Оригінальна гра. Будь-яка гра, що розповідає про якусь нову исторію, що не

копіює повністю старі ідеї з інших ігор, є оригінльною. Перша частина в серіях ігор

так само є оригіналом.

Чергова гра в ігровій серії (сиквел, приквел, ремейк). Ігри, що отримали

достатню популярність у гравців, продовжують розвиватися далі. Творці

залишають старих героїв, інші улюблені ігрові елементи, і переносять їх в нові

ігрові ситуації - так виходять продовження ігор

Доповнення до гри. Менше за обсягом продовження гри, яке може працювати

тільки в комплекті з оригінальною грою, називається доповненням до гри.

Скачуваний контент до гри (DLC). DLC - набір ігрових елементів (герої,

зброї, костюми, корисні предмети, рівні, вороги), які не входять до стандартного

набору гри, але які можна докупити у розробників за окрему плату, і додати в гру.

Будь-які неофіційні доповнення до гри, створені не розробниками, а гравцями-

фанатами, називаються модіфікаціямі (скорочено - моди) [11].

1.2.5 Опис класифікації ігор за типом їх поширення

Платні ігри

29

Гра на фізичному носії (диски, картриджі). Класичний спосіб

розповсюдження ігор, що використовувався з моменту зародження ігрової

інїдустріі.

Цифрова копія гри (продаж ігор через Інтернет). Копія гри, завантажна з

інтернет-ресурсу продавця. Сам процес такого продажу називається цифровою

дістрібьютіцією.

Оплата за ігровий час. У деяких випадках продається не копія гри, а ігровий

час. Оплата за сеанс гри використовується в іграх на аркадних ігрових автоматах.

Підписка на гру використовується в деяких онлайн іграх. Зазвичай, доступ до гри

оплачується раз в місяць.

Безкоштовні ігри

Умовно безкоштовна гра (shareware). Ігри, в які можна пограти безкоштовно

деякий час або кілька перших рівнів.

Безкоштовна гра з мікротранзакції (free to play, free2play) (велика частина

MMO-ігор). Ігри, які можна безкоштовно скачувати в інтернеті, встановлювати,

грати без будь-яких обмежень.

Безкоштовна гра (флеш-гра, браузерна гра, завантажується гра).

Браузерна гра - гра, яка використовує браузерні інтерфейси і зазвичай не

вимагає установки на комп'ютер додаткових додатків.

1.2.6 Опис класифікації ігор за кількостю гравців

Гра без участі гравців (Zero Player Game). У деяких іграх є можливість

налаштувати комп'ютерних супротивників так, що вони можуть битися між собою,

а сам гравець навіть не братиме участі в грі.

Одиночна гра (сінглплейер, англ. Singleplayer). Тип гри, в якій ігровий процес

розрахований на одного гравця.

Спільна гра на одному пристрої (Hotseat, Splitscreen). Гра, в якій можуть

брати участь відразу кілька гравців на одному пристрої.

30

Спільна гра на одному пристрої по черзі (англ. Hotseat) - почергова гра

можлива в іграх з покроковим режимом гри. Гравці здійснюють свої ходи по черзі,

використовуючи один і той же комп'ютер або консоль.

Розрахована на багато користувачів гра (мультиплейер, Multiplayer). Тип

гри, в якій можуть брати участь відразу кілька гравців. Кожен ігрок входить в гру

через свій пристрій (комп'ютер, консоль, мобільний пристрій).

Масова онлайн гра (англ. Massively multiplayer online game, MMO).

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

тисяч гравців). Такі онлайн ігри побудовані за принципом «клієнт-сервер».

Основна частина гри розташовується на спеціальному потужному комп'ютері, який

постійно підключений до інтернету (сервер).

Розрахована на багато користувачів оф-флайн-гра (PBEM). Існує особлива

категорія онлайн-ігор, в яких підключення до інтернету необхідно лиш на короткий

проміжок часу, тільки для того, щоб передати інформацію про свій хід.

1.3 Програмні сервіси та платформи, що мають потенціал для

геймифікації навчання

В даний час методи Гейміфікації в навчанні впроваджують різні освітні

установи по всьому світу (Стокгольмська школа імені Віктора Рюдберга [39],

проект LinguaLeo [40], «Роботландия» [41], «Професія-сор Хіггінс» [42], The

Legend of Zelda [43] та ін.). В ході аналізу досвіду російських та зарубіжних

педагогів виділені кілька комп'ютерних сервісів і платформ, які з більшим чи

меншим ступенем відповідають принципам і ідеї Гейміфікації.

Все різноманіття програмних засобів, що мають потенціал для Гейміфікації

навчання, було поділено на групи: сайти-конструктори ігор, ігрові платформи,

освітні квести, сервіси управління навчанням, готові онлайн-тренажери, ігрові

засоби навчання програмуванню.

31

До групи ігрових платформ відносяться: Classcraft [49], MinecraftEdu,

LinguaLeo, DuoLingo [50] та ін. Охарактеризуємо ті платформи, які найбільш

поширені в освітньому середовищі.

1. DuoLingo (https://www.duolingo.com) - чудовий приклад гейм-ції

навчального процесу. Засіб об'єднує в собі безкоштовний веб-сайт для вивчення

мов з платною платформою для перекладу текстів з використанням краудсорсингу.

Вимагає постійного підключення до мережі Інтернет. Гейміфікація процесу

навчання організована у вигляді дерева досягнень, як у справжній рольовій грі

(англ. Role-Playing Game, RPG).

2. Classcraft (https://www.classcraft.com/ru/) - ігрова платформа, що відноситься

до сфери проектування навчання. По суті, цей сервіс є ігровим варіантом бально-

рейтингової системи. Для отримання доступу необхідно зареєструватися на сайті

(тобто Застосування ресурсу можливо тільки при наявності Інтернету). Після

реєстрації - етап настройки персонажа (зовнішній вигляд, клас і здібності). На

початковому рівні можна отримати тільки одну здатність. Щоб розвивати

здібності, потрібно отримувати нові рівні. Управляє грою вчитель (майстер), він же

роздає бали за різні досягнення (виконання завдань, відповіді на питання).

Уявляється система ігрових заохочень і покарань.

Classcraft - це різновид гри живої дії. Вона передбачає наявність спільної

діяльності і комунікації, загальний предмет і спосіб діяльності, ієрархію

внутрішньоігрових мотивів, імітацію реальних процесів. Є безкоштовний і платний

(від $ 12 в місяць) тарифи. Передбачена можливість вибрати мову навчання

(російська, англійська і т. д.).

Друга група програмних засобів для Гейміфікації навчального процесу - це

освітні квести. У цій групі виділимо: Scratch [51], Quandary [52], RibbonHero [53].

1. Quandary (http://www.halfbakedsoftware.com/quandary.php) - сервіс для

проектування завдань з вибором ходу. Робота в середовищі організується у вигляді

інтерактивного дослідження по якійсь певній тематиці (наприклад, для уроку

біології це може бути боротьба за врожай, вирощування садових культур; на уроках

32

хімії Гейміфікація з цим інструментом дозволить в ігровій формі відкрити нову

хімічну речовину і т . п.). З 1 вересня 2009 року програмний засіб є безкоштовним,

при цьому файл-інсталятор знаходиться на офіційному сайті. Значний для багатьох

мінус конструктора - відсутність україномовного інтерфейсу.

2. RibbonHero (http://www.ribbonhero.com) - це безкоштовна надбудова до

офісного пакету Microsoft Office для навчання користувачів застосуванню ін-

струментів, доступних в новому стрічковому інтерфейсі. Після установки гри

можна легко почати з будь-якої з базових програм Office, таких як Word, Excel і

PowerPoint. Ігрові елементи укладаються в отриманні очок при виконанні завдань,

які згруповані в чотири розділи: робота з текстом, дизайн сторінки і макет, художнє

оформлення і швидкі окуляри.

3. Scratch (https://scratch.mit.edu) - проста, інтуїтивно зрозуміла і наочна мова

програмування для знайомства молодших школярів з основами алгорітмізаціі і

програмування. Розробник Scratch Мітчел Резник вважає, що найбільш

ефективним способом навчання є активне пізнання - пізнання через моделювання

навколишнього світу. Scratch - безкоштовний продукт, який дозволяє створювати

інтерактивні додатки. Гейміфікація навчання із застосуванням Scratch дозволяє

розвивати творче мислення, проектувати ефективну предметну взаємодію;

формувати навички системного аналізу.

Серед сервісів, які використовуються для Гейміфікації управління навчанням,

зазначу:

1. ClassDojo (https://www.classdojo.com) - безкоштовна система управління

поведінкою в класі, яка допомагає вчителям покращувати поведінку в своїх класах.

2. Goalbook (https://goalbookapp.com) - це онлайн-платформа, яка допомагає

вчителям, батькам і самим учням спільно відстежувати їх прогрес в навчанні. Це

один із прикладів реалізації методів гейміфікації контролю за успішністю.

Платформа платна - від 6000 $ в рік. Україно-мовний інтерфейс відсутній. Учні

спільно з учителями формують цілі, а також розбивають цілі на завдання, які

потрібно вирішити, щоб добитися цих цілей.

33

3. Coursera (https://www.coursera.org) - міжнародний проект в сфері масової

онлайн-освіти. Проект надає абсолютно безкоштовний доступ до великої кількості

освітніх курсів кращих навчальних закллладів світу. Гейміфікація навчального

процесу на платформі Coursera реалізована в рамках контролю за успішністю.

Прогрес в навчанні вимірюється шляхом виконання завдань і онлайн-тестів, які

оцінюються особисто викладачем або самою системою

4. Brainscape (https://www.brainscape.com) є мобільною платформою

навчання, яка допомагає студентам вивчати і запам'ятовувати інформацію на

основі спеціальних карток. Платформа застосовує адаптивні алгоритми при

створенні цих карток для запам'ятовування інформації в різних її формах (текстова,

числова, графічна), змінюючи послідовність показу карток в залежності від того,

що учень знає, а що викликає у нього труднощі. Метод, застосовуваний в цій

платформі, відомий як метод повторіння на основі впевненості (англ. Confidence-

Based Repetition, CBR). Система вимагає постійного доступу до мережі Інтернет,

україномовний інтерфейс відсутній.

Спектр сайтів - конструкторів ігор не такий широкий: еТренікі [57] і

LearningApps [58]. Це пов'язано з тим, що вчителям набагато простіше використати

готовий тренажер, ніж проектувати власний.

1. ЕТренікі (https://etreniki.ru) - це онлайн-конструктор навчальних тре-

нажерів. У цьому засобі за допомогою вбудованих підказок можна розробляти

додатки для Гейміфікації навчання. Робота організовується в Браузері, при цьому

на кожен тренажер створюється на сайті свій унікальний код.

2. LearningApps.org (https://learningapps.org) є додатком Web 2.0 для супроводу

навчання за допомогою інтерактивних модулів. Гейміфікація може грунтуватися

на готових модулях, вбудованих в зміст навчання, а також передбачається варіант

їх модифікації і розроблення нових. Головна характеристика - інтерактивність. Це

безкоштовний проект, у якому завдання розділені по предметним категоріям. Мови

сервісу: російська, англійська, німецька та ін.

34

Висновки до розділу

1. Проаналізовано доцільність застосуванні ігрових форм навчання. В педагогічній

діяльності необхідно приділяти особливу увагу механізмам впливу на мотивацію

навчання, свідомість і поведінку студентів, Ці завдання можуть бути вирішені при

застосуванні ігрових форм навчання, так як ігри дозволяють ефективно

організувати творчу взаємодію викладача і студентів, створюють умови для

формування особистісних якостей.

2. З’ясовано характеристики, структура освітніх ігор, принципи ігрової діяльності.

Проведено классифікацію ігор за ігровою платформою, графікою, змістом

.видавничими критеріям, типом їх розповсюдження, кількістю ігроків.

3. Встановлено програмні сервіси та платформи, що мають потенціал для

геймифікації навчання.

35

2. РОЗРОБКА КОМП’ЮТЕРНИХ ІГОР

2.1. Основні етапи розробоки комп’ютерної гри

Розробка комп'ютерних ігор - це досить чітко налагоджений процес, який має

певні етапи, що так чи інакше проходять ігри при їх створенні. Однак життя

зазвичай вносить свої корективи навіть у самі чіткі плани.

Дуже часто розробники ігор не можуть встигнути доробити гру в скільки-

небудь прийнятний термін - яскравий приклад - Duke Nukem Forever, випуску якого

весь ігровий світ чекав багато років. Практично завжди після виходу комп'ютерної

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

вкладаються у відведені їм терміни.

Тексти програм ігор нерідко "йдуть" в Інтернет і всі грають в новітню гру

задовго до її офіційного релізу. Причому, тут не можна однозначно сказати, чи

шкідливо це для ігрових компаній. З одного боку - шкідливо - адже копії гри

потрапляють до користувачів абсолютно безкоштовно (не рахуючи витрат на

трафік в Інтернеті). Однак, з іншого - часто "пішли" коди далекі від досконалості і

"витік" лише розігріває інтерес до фінальної версії гри.

Треба врахувати, що в ігровому бізнесі існує два типи компаній - розробник

(developer) і видавець (publisher). Якщо розробник і видавець збігаються - процес

розробки гри лише виграє - розробнику немає потреби переконувати стороннього

видавця в доцільності капіталовкладень в розробку.

Розглянемо етапи розробки типової комп'ютерної гри.

1. Концептування (Concept)

На цьому першому кроці команда придумує концепцію гри, і проводить

початкоеу опрацювання ігрового дизайну. Головна мета даного етапу - це

геймдізайнерська документація, що включає в себе Vision (розгорнутий до-кумент,

що описує гру, як кінцевий бізнес-продукт) і Concept Document (початкове

опрацювання всіх аспектів гри).

36

У документації продукту геймдизайнер формулює і зберігає свої ідеї.

Документація дозволяє виконавцю правильно розуміти свої завдання по реалізації

продукту. Тестувальник чітко бачить, що і як тестувати. Для Продюсера / ПМА ця

документація надає матеріал для формування планів і контролю виконання

завдань. Інвестор же (особливо на ранніх етапах) отримує розуміння, на що саме

він виділяє кошти.

Принципово важливо, щоб вся проектна та документація продукта

підтримувалася в актуальному стані на всіх етапах розвитку проекту. Для її

ефективного використання та оновлення правильно використовувати спеціальні

інструменти. Наприклад, використання Confluence для ведення геймдізайнерської

документації сильно спрощує процес паралельного внесення змін декількома

учасниками розробки, а також дозволяє всім членам команди оперативно

отримувати будь-яку актуальну інформацію, що стосується продукту і всіх його

змін.

Серед ключових принципів формування документації продукту варто

відзначити: структурованість, захищеність від різночитань, повний опис продукту,

регулярну актуалізацію.

2. Прототипування (Prototyping)

Важливий етап проектування будь-якої гри - це створення прототипу. Те, що

добре виглядає «на папері», зовсім не обов'язково буде цікаво в реальності.

Прототип реалізується для оцінки основного ігрового процесу, перевірки різних

гіпотез, проведення тестів ігрових механік, для перевірки ключових технічних

моментів.

Дуже важливо на етапі створення прототипу реалізовувати тільки те, що

потрібно перевірити і в стислі терміни. Прототип повинен бути простим в реалі-

зації, тому що після досягнення поставлених перед ним цілей, він повинен бути

«викинутий». Серйозна помилка початківців розробників - нести тимчасову

інфраструктуру і «милиці» реалізації коду в основний проект.

3. Вертикальний зріз (Vertical Slice)

37

Мета вертикального зрізу - отримати мінімально можливу повноцінну

версію гри, що включає в себе повністю реалізований основний ігровий процес.

При цьому високу якість опрацювання обов'язково потрібно втілити тільки для тих

ігрових елементів, які суттєво впливають на сприйняття продукту. При цьому всі

базові фичи гри присутні як мінімум в чорновій якості. Реалізовано мінімальний,

але достатній для втілення повноцінного ігрового процесу набір контенту (один

рівень або одна локація).

4. Виробництво контенту (Content production)

На цьому етапі виробляється достатня кількість контенту для першого за-

пуску на зовнішню аудиторію. Реалізуються всі фічі, заплановані до закритого

бета-тестування. Це найбільш тривалий етап, який може займати, для великих

клієнтських проектів рік і більше.

На цьому етапі задіюється найбільша кількість фахівців, які займаються

виробництвом всього основного наповнення гри. Художники створюють всі

графічні ресурси, Геймдизайнер налаштовує баланс і заповнює конфіги,

програмісти реалізують і полірують все фічі.

5. Friends & Family / CBT (закрите бета-тестування)

На етапі CBT продукт вперше демонструється досить широкому загалу, хоча

і лояльному до продукту або компанії. Серед найбільш важливих задач на цьому

етапі виступають: пошук і виправлення гейм-дизайнерських помилок, проблем

ігрової логіки і усунення критичних багів. На цьому етапі в грі присутні вже всі

ключові фичи, створено досить контенту для повноціної гри тривалий час,

налаштовані збір і аналіз статистики. Тестування йде по тест-плану, проводяться

стрес-тести вже із залученням реальних гравців.

6. Soft Launch / OBT (відкритий бета-тест)

На цьому етапі триває тестування гри, але вже на широкій аудіторії. Йде

оптимізація під великі навантаження. Гра повинна бути готова для прийому

великого трафіку. У грі реалізований білінг і приймаються платежі.

38

На цьому етапі повністю завершується розробка нових фичей. Відбувається

feature freeze, програмісти перестають реалізовувати щось нове, а повністю

переключаються на налагодження і тюнінг наявних фичей. Геймдизайнер,

продюсер і аналітики роблять висновки з зібраної на CBT статистики та

перевіряють ефективність монетизації.

При цьому, до початку етапу повинна повністю функціонувати інфра-

структура проекту: сайт, групи в соц. мережах, канали залучення (User Acquisition),

підтримка користувачів.

7. Release (Видання)

Ключова мета - це отримання прибутку. Базовий застосовуваний для оцінки

прибутковості критерій: кількість грошей, принесених в середньому одним иг-

роком за весь час (LTV aka lifetime value), має перевершувати витрати на залучення

цього гравця (CPI aka cost per install).

На цьому етапі має бути повністю налагоджено оперування продукту

(технічна підтримка, робота з ком'юніті), дотримуються маркетингові та фінансові

плани, ведуться роботи по поліпшенню фінансових показників, активно

відпрацьовуються канали по залученню трафіку.

Команда розробки на цьому етапі займається виправленням техничних багів,

що виявляються в процесі експлуатації і оптимізації продукту. Геймдизайнер

займається тонким налаштуванням геймплея під реальну ситуацію в ігровому світі

(особливо актуально для ММО проектів). Також реализуються різні

внутрішньоігрові «фічі», які підтримують нові монетізаціонні схеми. І звичайно,

йде розробка та інтеграція в продукт нового контента, що підтримує інтерес

гравців.

2.2 Поняття ігрового движка

39

Ігровий движок (англ. Game engine) - це програмна платформа для створення

і розробки комп'ютерних ігор або будь-яких інших додатків з графікою,

оброблюваної в реальному часі [8].

Ігровий движок, як правило, складається з наступних компонентів:

1. Графічний движок (англ. Graphics engine) - програмний компонент,

основним завданням якого є візуалізація (рендеринг) двомірної або тривимірної

комп'ютерної графіки.

2. Фізичний движок (англ. Physics engine) - програмний компонент, який

виробляє моделювання фізичних законів у віртуальному оточенні.

3. Звуковий движок (англ. Sound / audio engine) - програмний компонент, що

відповідає за відтворення звуку (шумове та музичне оформлення, голосів

персонажів) в комп'ютерній грі або іншому додатку.

4. Ігровий штучний інтелект (англ. Game artificial intelligence) - набір

програмних методик, які використовуються в комп'ютерних іграх для створення

ілюзії інтелекту в поведінці персонажів, керованих комп'ютером.

Рисунок 2.1 — Структура ігрового рушія

До появи ігрових движків нові ігри створювалися з нуля, будучи

оптимізовані під цільову платформу. Необхідність використання подібного

40

підходу обумовлювалася обмеженими можливостями апаратного забезпечення

того часу, а також тим фактором, що архітектура апаратного забезпечення часто

змінювалася.

Деякі сучасні ігрові движки є одними з самих складних, коли-небудь створених

додатків і включають в себе багато злагоджено працюючих підсистем, що

дозволяють ефективно використовувати доступні апаратні засоби для досягнення

найбільш повного досвіду взаємодії користувача з системою (user experience).

Безперервний розвиток ігрових движків призвів до чіткого поділу між

створенням графіки, логіки, дизайну персонажів і рівнів. Для кожного етапу

застосовуються окремі засоби розробки.

У своєму розвитку ігрові движки, з одного боку, стали набагато більш

дружніми до користувача, деякі навіть дозволяють обходитися без навичок

програмування. З іншого боку, стало більш широким їх застосування. Тепер вони

застосовуються не тільки в індустрії ігор, але і для створення додатків візуалізації

технічних процесів, всіляких симуляторів або просто для створення інтерфейсу

користувача [9].

2.3 Характеристики ігрових движків

Характеристики ігрового движка як засобу розробки обумовлюють область

його застосування. Значна їх частина визначається компонентами, з яких він

складається. Сучасний ігровий движок є комплексною програмною платформою,

що складається з декількох основних компонентів, кожен з яких може бути як

безпосередньою частиною движка, так і поставлятися окремо. Далі буде

розглянуто кожен з використовуваних компонентів.

Графічний движок (англ. Graphics engine) - проміжне програмне

забезпечення (англ. Middleware), основним завданням якого є візуалізація

комп'ютерної графіки. Графічний движок визначає можливості по відображенню

комп'ютерної графіки, які включають в себе:

41

1. Доступні режими рендеринга (2D / 3D).

2. Підтримувані програмні інтерфейси (OpenGL / DirectX).

3. Різні графічні характеристики: доступну роздільну здатність (кількість

точок на одиницю площі), роздільну здатність і фільтрацію текстур, параметри

освітлення і тіней.

Графічний движок може існувати як окремий продукт, але часто є частиною

ігрового движка. Головною відмінністю ігрового графичного движка є обробка

графіки в режимі реального часу.

На початковому етапі розвитку комп'ютерних ігор саме графічний движок

становив більшу частину ігрового движка (90 - 95%). І зараз, як правило, графічні

движки не поширюються окремо від ігрових, так як, по-перше, створення більшості

ігор неможливо без графічного движка (виняток - деякі логічні і текстові ігри). По-

друге, графічного движка самого по собі недостатньо для створення гри.

Фізичний движок (англ. Physics engine) - програмний компонент, який

виробляє комп'ютерне моделювання фізичних законів реального світу у

віртуальному світі, з тим або іншим ступенем наближення до реальності. Як і

графічний движок, ігровий фізичний движок повинен працювати в режимі

реального часу (на відміну, наприклад, від наукового фізичного движка). Однак, на

відміну від графічних движків, фізичний движок далеко не завжди є частиною

ігрового движка і часто поставляється окремо. Наприклад, найбільш популярні

движки є повністю незалежними програмними продуктами [10]:

NvidiaPhysX (26,8% ринку); Havok (22,7% ринку);

Bullet Physics Library (10,3% ринку);

Open Dynamics Engine (4,1% ринку).

Фізичні движки можуть симулювати такі фізичні явища і стан: динаміку

абсолютно твердого тіла; динаміу тіла, що деформується; динаміку рідин; динаміку

газів; поведінку тканин; поведінку мотузок (троси, канати і т.д.).

42

У минулому фізична симуляція проводилася виключно за рахунок ресурсів

центрального процесора, однак зараз фізичні движки мають апаратну підтримку,

наприклад, Nvidia PhysX використовує ресурси відеокарт Nvidia.

Важливо відзначити, що далеко не всі ігри потребують такої симуляції.

Звуковий движок (англ. Sound / audio engine) - програмний компонент

ігрового движка, який відповідає за відтворення звуку (шумове та музичне

оформлення, голоси персонажів) в комп'ютерній грі або іншому додатку.

Найчастіше є частиною ігрового движка, може використовувати такі відомі

програмні інтерфейси: OpenAL; DirectSound3d; Environmental Audio Extensions

(EAX); FMOD.

Ігровий штучний інтелект (ДІВ) (англ. Game artificial intelligence) -

програмний компонент і / або набір програмних методик, що використовуються в

комп'ютерних іграх для створення ілюзії інтелекту в поведінці віртуальних

персонажів. На відміну від традиційного в ігровому ІІ широко застосовуються

різного роду спрощення, обмани і емуляції, так як це дозволяє: знизити бюджет

гри; зменшити споживання ресурсів системи.

Наявність ігрового штучного інтелекту цілковито необхідна в наступних

одиночних іграх наступних жанрів:

- стратегії як покрокові, так і реального часу;

- шутери (англ. Shooter - «стрілялка»);

- в рольових іграх (RPG).

У той же час багато ігор можуть обійтися і без ДІВ, або він може бути

замінений відносно простою емуляцією, серед них:

- багато ігр для декількох гравців;

- аркадні ігри;

- більшість платформерів;

- головоломки;

- музичні ігри.

43

Важливо відзначити, що ігровий штучний інтелект, повинен переслідувати

мету не обіграти гравця, а красиво програти йому.

Цільові платформи. Ігровий движок визначає доступні цільові платформи,

для яких з його допомогою можна створити ігри, наприклад, пропріетарний

CryEngine 2, за допомогою якого був створений бестселер Crysis, міг бути

використаний тільки для створення ігор під платформу Micorsoft Windows. Unity і

Unreal Engine 4 підтримують майже всі існуючі платформи.

2.4 Засоби розробки і їх інтеграція

Для розробки комп'ютерних ігор використовуються різні технології: Adobe

Flash un ActionScript [11,29,32], HTML, CSS, AJAX [36], Java [37], Unity3D [27],

Adobe (Macromedia) Director, C ++, PHP, ASP .NET [6,27], Microsoft Silverlight і

інші. Історично найбільш популярними були Flash і Java, так як використовуючи

ці технології, можна було легко створювати інтерактивні ігри та анімацію. Однак,

слід зазначити, що Adobe Flash була більш популярна при розробці мережевих ігор,

ніж Java.

Однак багато хто з них (наприклад Adobe Flash) застаріли і на зміну їм

прийшли більш потужні засоби.

Сучасні ігрові движки часто включають в себе інтегровану середу розробки,

яка в свою чергу може складатися з багатьох спеціалізованих редакторів

порівнянних по функціоналу з повноцінними програмами [11].

Для більшої зручності розробника графічний движок може пропонувати

інтеграцію з існуючими професійними засобами розроблення, наприклад, Unity,

Unreal Engine і MonoGame пропонують інтеграцію з Visual Studio.

Наведемо приклади реальних движків, їх характеристик і створених з їх

допомогою ігор.

44

2.4.1 Unity

Unity (або Unity3d) – один з найвідоміших сучасних ігрових движків.

З'явився в 2005 році, на даний момент останньою версією є Unity 5. Станом на літо

2017 року кількість зареєстрованих користувачів Unity3D досягло 5 мільйонів [12],

що свідчить про величезну популярність движка. Відмінними його особливостями

є:

- продумана архітектура проекту;

- підтримка всіх актуальних цільових платформ;

- широке співтовариство фахівців;

- наявність безкоштовної версії, яка майже не має обмежень;

- універсальність - можливе створення як 2D, так і 3D ігор всіх жанрів.

Відомі ігри: Temple Run (2011), Endless Space (2012), Deus Ex: The Fall (2013),

Hearthstone: Heroes of Warcraft (2014 року), Endless Legend (2014 року), Ori and the

Blind Forrest (2015).

2.4.2 MoneGame / XNA

XNA - ігровий движок, створений Microsoft на основі .Net Framework

випущений в 2006 році. Дозволяв створювати ігри для всіх Windows платформ до

появи Windows 8. У 2013 році Microsoft офіційно відмовилися від подальшої

45

підтримки проекту. Однак з огляду на популярність і простоту XNA була створена

її вільна реалізація - MonoGame, яка продовжує розвиватися і зараз [13]. Її

особливостями є:

- відносно низький поріг входження;

- інтеграція з Visual Studio;

- підтримка основних платформ (включаючи мобільні).

Відомі гри: Magicka (2011), Bastion (2011), Fez (2013), Transistor (2014 року).

2.4.3 Unreal Engine

Відомий ігровий движок з довгою історією, що розробляється і під-

тримується компанією Epic Games. Був випущений в 1998 році разом з од-

ноіменою грою, створеною з його допомогою. Спочатку движок відрізнявся

високою технологічністю, продуманою архітектурою і розвиненими засобами

розробки. З тих пір на основі Unreal Engine було випущено сотні ігор, здебільшого

в жанрі Action, багато з яких стали бестселерами. У 2015 році движок став

безкоштовним, проте, розробники ігор, повинні передавати 5% від прибутку гри

компанії Epic Games.

До особливостей движка можна віднести:

- потужний редактор, що містить в собі кілька вузькоспеціальних редакторів;

- передові технології рендеринга;

- хорошу переносимість;

- відносно безкоштовну ліцензію.

Відомі ігри: Unreal (1998), Серія ігор Tom Clancy's Splinter Cell Series (2004 -

2013), серія ігор BioShock (2007 - 2013), Might & Magic Heroes VII (2015).

2.4.4 Construct 2

46

Construct 2 - відносно новий ігровий движок для створення 2D ігор,

орієнтований на початківців і інді розробників, випущений в 2011 році. Движок

заснований на HTML5 і JavaScript, що робить створені ігри доступними майже для

всіх платформ. Дозволяє створювати ігри в зручному редакторі і навіть не вимагає

навичок програмування. Ліцензія платна, але відносно дешева. Є безкоштовна

ознайомча версія.

Особливості Construcnt 2:

- зручний і простий WYSIWYG інтерфейс;

- не вимагає навичок програмування;

- ігри доступні для всіх основних платформ, в тому числі для браузерів;

- хороша документація, в тому числі на різних мовах.

Відомі ігри: . Super Ubie Land (2012), Airscape: The Fall of Gravity (2013), Our

Darker Purpose (2014 ), Mortar Melon ( 2014), The Next Penelope (2015).

2.4.5 Blitz3D

Blitz3D - це середовище розробки, призначене для швидкого створення

ігрових проектів з використанням тривимірної графіки, що заснована на мові

програмування під назвою BlitzBasic. По суті, BlitzBasic базується на синтаксисі

мови Basic, яка набула широкого поширення і популярність завдяки своїй простоті

у вивченні і використанні. Крім того, Blitz3D дозволяє підключати до проекту

бібліотечні файли, написані на інших мовах, що винятково розширює його

можливості. Простота створення ігор на цій мові досягається тим, що вона

практично повністю складається з уже готових команд для роботи з графічними та

іншими об'єктами. Таким чином, щоб, наприклад, відобразити на екрані куб, сферу

або конус, досить одного рядка, в якому будуть присутні назва об'єкта і його

параметри (координати центру і розміри), а також команда відображення на екрані.

Щоб зробити з предметом будь-які дії на зразок обертання, переміщення і т.д.,

досить двох-трьох команд. Замість найпростіших геометричних примітивів можна

47

брати і складніші об'єкти (рельєф місцевості, моделі персонажів, антураж

лабіринтів): основні команди по їх маніпулюванню залишаться тими ж. Blitz3D -

хороший інструмент для створення казуальних або міні-ігор [5].

2.4.6 Unreal Development Kit (UDK)

Unreal Development Kit (UDK) - потужний набір інструментів для створення

інтерактивних 3D-додатків та ігор на базі ігрового движка Unreal Engine 3.

Придатний для створення ігор вищого, AAA-класу. Безкоштовний для

некомерційного використання, є комерційне ліцензування за схемою «99 $ + 25%

від прибутку після перших зароблених 50.000 $». Підтримує платформи Windows і

iOS.

2.4.7 Движок для мобільної платформи

Cocos 2D-X

Оригінальний Cocos 2D був розроблений на Python в 2008 році, потім в тому

ж році він був портований на мові Objective C під iPhone (версія Cocos 2D-iPhone);

два поки опісля була випущена крос-платформена версія Cocos 2D-X на

C ++.

Потім з'явилися версії з підтримкою Android (Java), XNA (C #) і HTML 5

(JavaScript). Також є розширення для візуалізації тривимірної графіки Cocos 3D,

але воно не отримало особливого розвитку і поширення просто тому, що

користувачам не хочеться 3D на мобільному пристрої.

Найбільш затребувана версія саме Cocos 2D-X, завдяки C++ і крос-

платформеності. Поточною стабільною версією движка є 2.1.5, яка вийшла 23

48

серпня 2016 року. Заявлена підтримка: iOS, Android, Windows Phone 7 (XNA),

BlackBerry, Tizen, Bada, Marmalade, Windows, Linux. Використовуючи Cocos 2D-X,

можна кодувати на C ++, Lua і JavaScript. Движком користуються як програмісти-

дослідники, невеликі інді-команди, так і монстри ігрової індустрії: Zynga, Konami,

Disney Mobile. Завдяки шаленій популярності движка - півтора мільярда

закачувань заснованих на ньому ігор - в його розвитку беруть участь розробники з

Google, Microsoft, Intel.

Підтримка движком акселерометра дозволяє створювати динамічні ігри з

переміщенням в просторі. Безумовно, для обробки фізики використовується Box

2D, плюс, на вибір, движок Chipmunk. Є кілька спеціальних окремих редакторів (як

платних, так і безкоштовних), що слугують створенню певного контенту: атласів,

шрифтів, частинок, спрайтових таблиць і так далі. Набір GUI-елементів досить

малий, але можна створити відсутні компоненти самостійно.

Більш повний перелік вільних і комерційних движків ігор наведено в

Додатку В.

2.4.8 Конструктори ігор

Конструктор ігор - програма для швидкого конвеєрного складання

комп'ютерних ігор, людям без спеціальної підготовки. Об'єднує в собі ігровий

движок і IDE, і значно спрощує процес створення ігор, роблячи створення ігор

доступним аматорам-непрограмістам.

Іноді конструктори ігор обмежені тим чи іншим жанром (наприклад

аркадами, RPG або квестами). У найпростішому випадку до конструкторів можна

віднести готову гру з просунутим редактором ігор (напр. Cube або Stratagus). На

іншій стороні спектра знаходяться класичні середовища програмування,

орієнтовані на розробку ігор, такі як Blitz BASIC [3].

49

Game Maker - популярний і простий в освоєнні конструктор ігор, що

дозворляє створювати ігри без глибокого знання програмування. Підтримує

платформи Windows, iOS і Android.

RPG Maker - серія конструкторів ігор в стилі jRPG (від japaneseRPG, японська

рольова гра). Конструктор простий в освоєнні і поставляється з готовим набором

контенту.

Варто відзначити, що за останні роки грань між ігровими движками і

конструкторами ігор була серйозна розмита. Якщо раніше можна було сказати, що

ігровий движок - це шматок коду з мінімальним набором редакторів (або зовсім без

них) і інших засобів, що полегшують створення гри, а конструктор - це «закритий»

код, з усілякими візуальними редакторами і забезпечений певним базовим

контентом, то тепер багато ігрових движків сповідують «візуальний» підхід до

створення ігор, підтримують всілякі принципи drag & drop, слайдери, повзунки,

візуальні редактори майже для всього при мінімізації ручного написання

програмного коду. Найбільш яскравий приклад - ігровий движок Unity, який до

90% роботи по створенню гри дозволяє проводити в своєму редакторі [4].

Сучасні ігрові движки часто включають в себе інтегровану середу розробки,

яка в свою чергу може складатися з багатьох спеціалізованих редакторів

порівнянних по функціоналу з повноцінними програмами [11].

Для більшої зручності розробника графічний движок може пропонувати

інтеграцію з існуючими професійними засобами розроблення, наприклад, Unity,

Unreal Engine і MonoGame пропонують інтеграцію з Visual Studio.

2.5 Застосування технологій доповеної реальності

Перспективність і темпи впровадження технологій віртуальної і доповненої

реальності свідчать про те, що засоби навчання, розроблені на їх основі, стануть

невід'ємною частиною навчання на всіх рівнях освіти, а їх роль значно зросте як в

рамках традиційної очної підготовки, так і в рамках дистанційної освіти [1].

50

Доповнена реальність (AR) – це технологія, в якій уявлення користувача в

реальному світі посилюється й доповнюється додатковою інформацією

комп’ютерних моделей, що дозволяє користувачеві залишатися на зв'язку із

реальним навколишнім середовищем. AR- система виводить цифровий пристрій до

реального робочого середовища користувача. У ролі доповнюючої інформації

може виступати текст, зображення, відео, звук або тривимірні об'єкти, статичні або

анімовані - фактично, абсолютно будь-які цифрові дані. За допомогою спеціальних

програм-браузерів, встановлених на планшети і смартфони, учбовці сканують

мітки, отримуючи доступ до додаткового контенту і посилань.

Для реалізації системи доповненої реальності необхідно мати спеціальне

технічне обладнання і програмне забезпечення. Визначимо мінімальний комплект

обладнання, який потрібен для реалізації такого підходу: необхідна кількість

смартфонів, спкціальних дисплеїв чи AR-окулярів, планшет педагога, Wi-Fiроутер,

система віддаленого оновлення, навчальні додатки.

За допомогою доповненої реальності розвивається просторовоа уява студентів,

що посилює глибоке розуміння ними процесів, властивостей, доведення теорем

тощо. Зокрема, при освоєнні студентами технічних вишів тем “Векторна алгебра”,

“Побудова просторових кривих”, “Поверхні другого порядку” дуже важко, а часом

і неможливо, засобами реального світу наочно продемонструвати тривимірні

образи та їх властивості так яскраво, як це можна зробити, маючи відповідний

відеоконтент. Розглядаючи геометричний зміст похідної функції однієї змінної з

допомогою інструментів AR, студенти безпосередньо спостерігають наближення

січної до дотичної в даній точці. Аналітичне доведення багатьох теорем

диференціального числення поглиблюється зрозумілою наочною інтерпретацією.

При вивченні тем з аналітичного аналізу “Числові ряди”, “Ряди Тейлора”, “Ряди

Фур’є” можливості AR надають змогу студентам глибше зрозуміти означення суми

ряду, побудову частинних сум, знаходження суми числових рядів, процес

наближення поліномів Тейлора до функцій, амплітудний та частотний спектри

ряду Фур’є, фізичний зміст рядів Фур’є та їх застосування в техніці. При цьому

51

значно покращується процес осмислення та запам’ятовування навчального

матеріалу, у навчання привноситься ігровий елемент з динамічними елементами

анімації.

Нижче наведемо приклади додатків доповненої реальності, які

використовуються в освітньому процесі:

Melchemistry – додаток, пов’язаний з хімічними дослідженнями для розгляду

різнопланових процесів. Наприклад, при вивченні процесів запису інформації на

тривимірні диски для студентів спеціальності «Комп’ютерні науки», цікавим був

би розгляд процесу фотополімеризації, при якому багатошаровий диск виходить

складанням шарів одним за іншим, що формуються з «тонких відбитків» (або

інформаційних шарів).

Додаток Anatomyou, є освітнім мобільним додатком, що представляє анатомію

людини для користувача з будь-якої точки огляду.

Додаток IKEA дозволяє студентам-дизайнерам інтер’єру за допомогою

стартфону дивитися у реальному часі, як буде той чи інший об’єкт виглядати у

кімнаті.

Додаток CreatorAR дозволяє створювати навчальні завдання, обмінюватись

враженнями за допомогою мобільних пристроїв. Допомагає студентам та

викладачам швидко створювати переконливий, інтерактивний навчальний контент

безпосередньо на своїх планшетах та смартфонах для відтворення в мобільному

телефоні у сенсорному режимі. Студенти мають можливості задавати питання та

відповідати на них працюючи в аудиторії.

«AR асистент» - допомога у вивченні виробничих процесів, проектуванні

складних механізмів (нафтогазова галузь, будівництво, проектування комплексних

технологічних об'єктів і споруд і т. д.);

«Серйозні ігри» - моделювання і симуляція надзвичайних ситуацій (військова

справа, розробка родовищ, МНС і т. д.);

52

Мобільні ігрові програми, ігри та іграшки в доповненої реаль-ності

(розмальовки, кубики, пазли, книги та ін.), Тренінги персоналу, бізнес-ігри та

симуляції, AR квести та ін.

Рисунок 2.2 — Вивчення англійської абетки із застосуванням технології

Доповненої Реальності в мобільному додатку AR Flashcard

Компанія Unity постійно працює над удосконаленням, створенням нових

інструментів. Одним з них є засоби розробки для доповненої реальності (AR) -

техніки візуалізації, що має справу з комбінуванням об'єктів реального світу і

інформації, згенерованої за допомогою комп'ютера. Вони зможуть в буквальному

сенсі підняти технологію на новий рівень. Нове розширення Unity під назвою

Project MARS (скорочення від Mixed and Augmented Reality Studio) надає

розробникам можливість створювати AR-додатки, «які живуть в реальному світі і

реагують на нього».

Розширення надає розробникам новий набір інструментів для малювання

специфічних для доповненої реальності просторових параметрів, таких як

просторова близькість, розмір площини і співвідношення відстаней.

53

Project MARS також привносить кілька інших поліпшень - завдяки функції

Simulation View. Simulation View дозволяє розробникам бачити в режимі реального

часу через підключену камеру, як працюють ефекти для AR масок. У Simulation

View також є кілька шаблонів кімнат для імітації того, як AR контент буде вести

себе в реальній кімнаті з різними перешкодами. Раніше для цього було потрібно

практичне тестування і багатогодинне кодування. Project MARS можна

використовувати для створення лицьових масок і AR сцен. Найближчим часом

Unity представить новий робочий процес для анімації особи, який міг би зробити

непотрібними всі використовувані зараз маркери, макіяж і костюми для захоплення

руху.

Facial AR Remote Component дозволяє розробникам і творцям контенту

захоплювати рух в режимі реального часу за допомогою TrueDepth камери iPhone

X. Захоплені кадри потім можна обрізати і зшити в редакторі Unity. На думку

представників Unity, кожен зможе скористатися цим інструментарієм для простого

створення кінематографічного контенту.

Комбінація цих двох нових інструментів в поєднанні з мобільними

інструментами від Apple і Google, і апаратним забезпеченням наступного

покоління від Microsoft і Magic Leap, в майбутньому посприяє підвищенню якості

контенту доповненої реальності. Також це відкриває можливості AR технологій

для більшої кількості розробників і творців контенту.

Окремо можна виділити ігри, що використовують прив'язку до об'єктів

реального світу і карти - це ігри, в яких ті чи інші ігрові об'єкти доступні гравцям

тільки в певних місцях реального світу, наприклад в парку або біля водойми. Крім

того, подібні ігри обробляють зображення з камери смартфона і накладають на

нього додаткові елементи, створюючи так звану доповнену реальність. На менш

потужних пристроях режим доповненої реальності недоступний і гравець бачить

лише ігровий всесвіт, але, тим не менш, пов'язаний з реальною картою місцевості.

За оцінками аналітиків, AR-технологія стане однією з основних технологій

навчання через декілька десятків років. Багато пристроїв доповненої реальності

54

знаходиться в розробці. Застосування AR в галузях освіти матиме позитивний

вплив на процес викладання, допоможе покращити освітній результат, дозволить

студентам зрозуміти викладений матеріал та посилить мотивацію студентів.

2.6 Особливості розробоки ігор на Unity 3D

2.6.1 Огляд ігрового движка Unity 3D

За останні кілька років з'явилася велика кількість інструментів для розробки

ігор, і Unity один з найновіших і потужних представників цього сімейства.

Програма Unity [1] є професійним ігровим движком, який можна використовувати

для створення відеоігор під різні платформи. Цей інструмент щодня

використовують не тільки досвідчені розробники (що мають багаж знань про

розробку багатьх ігор різної складності), а й новачки, які можуть взагалі не мати

досвіду в розробці ігор (через простоту і доступність Unity). Зовсім недавно

людина, яка прийняла рішення навчитися програмуванню ігор (особливо

тривимірних), тут же стикалася з безліччю серйозних перешкод, в той час як

інструмент Unity дозволив значно полегшити життя новачкам.

Створення відеоігор по суті нічим не відрізняється від написання будь-якого

іншого ПЗ; здебільшого відмінності виявляються в кількісній площині. Наприклад,

гра набагато більш інтерактивна, ніж більшість веб-сайтів, а значить, вам буде

потрібно зовсім інший тип коду, але при цьому в обох випадках будуть задіяні

подібні навички і процеси.

Unity це мультиплатформенний ігровий движок для розробки двох-і

тривимірних ігор, що працюють під операційними системами Windows OS X,

Windows Phone, Android, Apple IOS, Linux, а також на ігрових приставках Wii,

PlayStation 3, PlayStation 4, Xbox 360, Xbox One. Є можливість створювати додатки

55

для запуску в браузерах за допомогою спеціального модуля Unity (Unity Web

Player), а також за допомогою реалізації технології WebGL (програмна бібліотека,

що дозволяє створювати на JavaScript інтерактивну 3D-графіку). Unity підтримує 2

сценарних мови JavaScript, C #. Розрахунки фізики виробляє фізичний движок

PhysX розроблений компанією NVIDIA. Платформа Unity була створена з

прицілом демократизувати розробку ігор і вирівняти ігрове поле для розробників

зі всієї земної кулі. З небувалими в галузі цінами і бізнес-планами, неймовірною

легкістю портувания на безліч платформ і глибоким, але доступним редактором

проектів.

2.6.2 Недоліки і переваги Unity 3D

Будь-який сучасний ігровий движок надає розробникам ігор безліч

функціональних можливостей, які задіюються в різних іграх. Реалізована на цьому

движку гра отримує всі ці функціональні можливості, крім того, додаються її власні

ігрові ресурси і код ігрового сценарію. Unity пропонує моделювання фізичних

середовищ, карти нормалей, затінення навколишнього світла у екранному просторі

(SSAO), динамічні тіні і т.д. Подібним набором функціональних можливостей

можуть похвалитися багато ігрові движки, але у Unity є дві основні переваги перед

іншими передовими інструментами розробки ігор: надзвичайно продуктивний

візуальний робочий процес і потужна міжплатформена підтримка [2].

Візуальний робочий процес являє собою досить унікальну річ, що виділяє

даний інструмент з більшості інших середовищ розробки ігор. У той час як інші

інструменти розробки ігор часто являють собою мішанину розрізнених частин, які

потрібно контролювати, чи, можливо, бібліотеку, для роботи з якою потрібно

налаштовувати власну інтегровану середу розробки (Integrated Development

Environment, IDE), лінію складання та інше в цьому роді , робочий процес в Unity

прив'язаний до ретельно продуманого візуального редактору. У цьому редакторі

компонуються сцени майбутньої гри, пов'язуючи ігрові ресурси і код в

56

інтерактивні об'єкти. Саме він дозволяє швидко і раціонально створювати

професійні ігри, забезпечуючи небачену продуктивність праці розробників і

надаючи в їх розпорядження вичерпний перелік найсучасніших технологій в

області відеоігор [3].

Більшість інших інструментів, оснащених центральним візуальним

редактором, страждають від обмеженої і недостатньо гнучкої підтримки

можливості написання сценаріїв, але інструмент Unity позбавлений цього недоліку.

Незважаючи на те, що все, створюване для Unity в кінцевому рахунку проходить

через візуальний редактор, основний інтерфейс включає в себе безліч пов'язаних

проектів з нестандартним кодом, що запускаються в ігровому движку Unity. Це

свого роду аналог зв'язування класів в параметрах проекту для таких IDE, як Visual

Studio або Eclipse. Тому досвідчені програмісти не повинні нехтувати середовищем

Unity, вважаючи, що це чисто візуальний інструмент створення ігор з обмеженою

можливістю програмування.

Особливо корисний цей редактор при розробці проектів з послідовним

поліпшенням, наприклад, в циклах створення прототипів або тестування.

Коригувати об'єкти в редакторі і рухати елементи в сцені можна навіть при

запущеній грі. Крім того, Unity дозволяє налаштовувати і сам редактор за

допомогою сценаріїв, що додають нові функціональні особливості та елементи

меню до інтерфейсу.

На додаток до значних переваг в плані продуктивності, які дає редактор, у

набору інструментів Unity існує ще й сильна міжплатформена підтримка. В даному

випадку під цим словосполученням маються на увазі не тільки місця розгортання

(ви можете розгорнути гру на персональному комп'ютері, в Інтернеті, на

мобільному пристрої або на консолі), а й інструменти розробки (створення гри

може здійснюватися на машинах, що працюють під управлінням як Windows, так і

Mac OS). Ця незалежність від платформи стала результатом того, що спочатку

інструмент Unity призначався виключно для комп'ютерів Mac, а пізніше був

перенесений на машини з операційними системами сімейства Windows. Перша

57

версія з'явилася в 2005 році, але на цей момент вийшли вже п'ять основних версій

(з багатьма невеликими, але частими оновленями). Спочатку інструмент Unity

підтримував розробку і розгортання тільки для машин Mac, але через кілька місяців

вийшло оновлення, що дозволяє працювати і на машинах з Windows. У наступних

версіях поступово додавалися все нові платформи розгортання, наприклад:

міжплатформений веб-плеєр в 2006-му, iPhone в 2008-му, Android в 2010-му і

навіть такі ігрові консолі, як Xbox і PlayStation. Зовсім недавно з'явилася

можливість розгортання в WebGL - новому фреймворку для тривимірної графіки у

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

кількість цільових платформ розгортання, і жоден з них не робить операцію

розгортання на різних платформах настільки простим.

На додаток до цих основних переваг йде і третя, менш помітна перевага, що

забезпечується модульною системою компонентів, яка призначена для

конструювання ігрових об'єктів. «Компоненти» в такій системі є комбіновані

пакети функціональних елементів, тому об'єкти створюються як набори

компонентів, а не як жорстка ієрархія класів. Іншими словами, компонентна

система є альтернативним (і зазвичай більш гнучким) підходом до об'єктно-

орієнтованого програмування, в якому ігрові об'єкти створюються шляхом

об'єднання, а не успадкування. Порівняння підходів продемонстровано на рисунку

1.1.

У компонентної системі об'єкт існує в горизонтальній ієрархії, тому різні

об'єкти складаються з різних наборів компонентів, а не зі структури успадкування,

в якій різні об'єкти виявляються на різних гілках дерева. Така компоновка

полегшує створення прототипів, тому що взяти потрібний набір компонентів куди

швидше і простіше, ніж перебудовувати ланцюжок успадкування при зміні

кожного об'єкта.

58

Рисунок 2.3 – Порівняння успадкування і компонентної системи [1]

Зрозуміло, ніщо не заважає написати код, який реалізує іншу власну

компонентну систему, але в Unity вже існує цілком надійний варіант такої системи,

органічно вбудований в візуальний редактор. Тому у розробників ігор є можливість

не тільки програмно керувати компонентами, але і встановлювати і розривати

зв'язjк між ними в редакторі. Звичайно ж, їх можливості не обмежуються

складанням об'єктів з готових деталей; також у власному коді можна скористатися

успадкуванням і всіма напрацьованими на його базі паттернами проектування.

Unity має безліч переваг, які перетворюють його в чудовий інструмент для

розробки ігор, але він також не позбавлений недоліків. Зокрема, поєднання

візуального редактора зі складним кодом, не дивлячись на його ефективність в

рамках компонентної системи Unity, є нетиповим і може викликати труднощі. У

складних сценах можна випустити з уваги деякі з приєднаних компонентів. У Unity

присутня функція пошуку, яка дозволяє виявляти приєднані сценарії, але вона не є

достатньо надійною - іноді виникають ситуації, коли для пошуку пов'язаних

сценаріїв доводиться вручну переглядати всі елементи сцени. Таке відбувається не

так часто, однак цієї кропіткої і трудомісткої роботи хотілося б взагалі уникнути.

Ще одним несподіваним і бентежуючим для досвідчених програмистів

недоліком є той факт, що Unity не підтримує посилання на зовнішні бібліотеки

коду. Всі доступні бібліотеки, які планується використовувати в грі, необхідно

59

вручну скопіювати в проект, замість того щоб просто дати посилання на одну папку

загального доступу. Відсутність єдиної папки з бібліотеками ускладнює спільне

використання функціоналу різними проектами. Цю незручність можна обійти,

раціонально використовуючи системи контролю версій, але готове рішення даної

проблеми в Unity відсутнє.

Третій недолік пов'язаний з використанням шаблонів примірників (prefabs).

Шаблони примірників надають гнучкий підхід до візуального створення

інтерактивних об'єктів. Ця вкрай потужна концепція існує виключно в Unity (і,

природно, вона пов'язана з компонентною системою Unity), але редагування таких

шаблонів іноді виявляється на диво важко реалізованим. Вони є корисним і

важливим аспектом роботи з Unity і можливо в майбутніх версіях спосіб їх

редагування буде вдосконалений.

2.6.3 Інтерфейс Unity

Інтерфейс Unity складається з декількох частин: вкладка Scene, вкладка Game,

панель інструментів, вкладка Hierarchy, панель Inspector, вкладки Project і Console.

У кожній частині є власне призначення, при цьому всі вони грають важливу роль в

процесі створення гри:

- Вкладка Project призначена для перегляду файлів

- У вкладці Scene можна переглядати поміщені в тривимірну сцену об'єкти. На

панелі інструментів розташовуються всі необхідні елементи управління сценою.

- Міняти взаємозв'язки між об'єктами можна методом перетягування на

вкладці Hierarchy.

- В панелі Inspector можна отримати / змінити інформацію про виділені

об'єкти, в тому числі і про пов'язані з ними коди.

- Тестувати отримані результати можна на вкладці Game, одночасно

переглядаючи повідомлення про помилки на вкладці Console.

60

Ця компоновка пропонується за замовчуванням; всі доступні представлення

поміщені на вкладки, які можна переміщати, можна змінювати їх розмір і

фіксувати в різних частинах екрану.

На рисунку 2.2. зображений інтерфейс програми Unity 3D.

Рисунок 2.4 – Частини інтерфейсу Unity

Панель Hierarchy відображає текстовий список всіх об'єктів сцени і їх

взаємозв'язків. Для зв'язування об'єктів потрібно перетягнути їх на цю панель.

Виберіть Project і Console призначені для перегляду всіх файлів проекту і

повідомлень, що стосуються коду програми, відповідно. Виберіть Scene і Game

призначені для перегляду тривимірних сцен і відтворення ігор відповідно. Верхню

частину цілком займає панель інструментів. Зліва кнопки для огляду і переміщення

об'єктів (дивись рисунок 1.3), а в центрі розташовується кнопка Play. З правого

боку розташовується панель, що відображає інформацію про виділений в даний

момент об'єкт.

61

Рисунок 2.5 – Інструменти і засоби відображення элементів сцени [1]

Засоби відображення елементів сцени включають в себе перемикання режимів

2D/3D, відображення джерел світла, включення звуку, а також відображення sky-

box, туману і відблисків.

2.6.4 Вибір мови програмування. Міжплатформена середа розробоки

Хоча компоновка ігрових ресурсів відбувається в візуальному редакторі,

потрібний керуючий ними код, що забезпечує інтерактивність гри. Unity підтримує

всього 2 мови програмування JavaScript і C #.

Мова C # має ряд переваг перед мовою JavaScript і має куди менше недоліків,

особливо з точки зору професійного розробника. Однією з переваг є той факт, що

мова C # строго типізована, чого не можна сказати про JavaScript. Серед

досвідчених програмістів в даний час існують різні точки зору з приводу того, чи є

динамічна перевірка типів оптимальним підходом, наприклад, до веб розробки, але

при написанні програм для певних ігрових платформ (таких, як iOS) вона часто

вигідна, а часом потрібно навіть статична типізація. У Unity навіть додана

директива #pragma, примусово забезпечує статичну перевірку типів в мові

JavaScript. Хоча з технічної сторони таке цілком допустимо, при цьому

62

порушується один з основних принципів функціонування JavaScript. Тому краще

спочатку вибрати мову зі строгою типізацією.

Це всього лише один приклад того, як відрізняється мова JavaScript в Unity.

Багато в чому вона нагадує JavaScript у веб-браузерах, але у функціонуванні мови

є ряд залежних від контексту відмінностей. Багато розробників називають версію

для Unity ім'ям UnityScript, яке вказує на схожість, але одночасно і на відміну від

JavaScript. Саме цей стан «аналогічний», але відрізняється »стає для програмістів

проблемою і при спробах застосувати загальні знання мови JavaScript в контексті

Unity, і при спробах застосовувати на стороні знання, отримані в процесі роботи в

Unity. Тому в даній роботі буде використовуватися мова C #.

Програмування здійснюється не всередині Unity, код існує у вигляді окремих

файлів, місце розташування яких ви повідомляєте Unity. Файли сценаріїв можуть

створюватися в додатку Unity, але в будь-якому випадку вам буде потрібно

текстовий редактор або IDE, де буде писатися код для цих спочатку порожніх

файлів. У комплекті з Unity поставляється додаток MonoDevelop як

міжплатформене інтегроване середовище розробки (IDE) для мови C # з відкритим

вихідним кодом. Більш детальну інформацію про цю програму можна отримати на

сторінці www.monodevelop.com, але при цьому необхідно використовувати версію,

що йде в комплекті з Unity, а не скачаним з цього сайту додатком, так як в базову

програму було внесено ряд змін для кращої інтеграції з Unity.

Висновки до розділу

1. Досліджено існуючі інструментальні засоби для розробки ігор. Проведено

порівняння ігрових движків. Вибраний оптимальний інструмент для розробки

якісного продукту - Unity 3D.

2. Проаналізовано основні аспекти розробки ігор в цілому і на Unity зокрема.

Він показав себе як дуже гнучкий, зручний і простий інструмент для створення

ігор, що не вимагає установки додаткового програмного забезпечення (для

63

розробки гри використовувався тільки Unity), при цьому значних недоліків при

роботі з ним помічено не було. Unity постійно розвивається і досить часто

виходять нові версії (в яких з'являються нові можливості, а також поліпшуються

старі), тому деякі аспекти даної роботи будуть неактуальні через деякий час.

3. Встановлено можливість впровадження систем віртуальної і доповненої

реа-льності для створення освітніх ігор. Визначено особливості розробки ігор з

прив'язкою до об'єктів реального світу і карти.

64

3. РОЗРОБКА ВІДЕОГРИ НА UNITY

Інструмент Unity надає початківцям розробникам можливість негайно

приступити до роботи, але перед цим необхідно все ретельно продумати і

обговорити всі нюанси. Наявність такого гнучкого інструменту як Unity не

вирішує всі проблеми і тому необхідно чітко уявляти, що саме повинно вийти в

результаті.

3.1. Планування проекта типу Pokémon GO

3.1.1 Що уявляе з себе Pokémon GO

Ідея гри Pokémon GO зародилася в Сатору Івати з Nintendo та Цунеказу

Ішіхари з The Pokémon Company першого квітня 2014 року. Pokémon Go —

розрахована на багатьох користувачiв рольова відеогра доповненої реальності із

серії Pokémon. Розроблена Niantic і початково видана в США, Австралії та Новій

Зеландії 6 липня 2016 року для мобільних пристроїв на базі iOS і Android. Всього

за два тижні після виходу гра здобула велику популярність і збільшила ринкову

капіталізацію власниці бренду Pokémon, компанії Nintendo, вдвічі, до понад $40

млрд. На вересень 2016 року кількість завантажень гри сягнула понад 500 млн, а в

серпні 2019 склала 1 млрд. Летом 2016 года приложение Pokémon GO было чуть ли

не популярнее Олимпиады в Рио. Игре удалось захватить сердца взрослых и детей

и за первые 24 часа после запуска вырваться в топы App Store и Google Play.

Pokémon GO ( «Покемон ГО» або «Покемон Гоу») - це гра, яка використовує

прив'язку до об'єктів реального світу і карти, тобто ті чи інші ігрові об'єкти

доступні гравцям тільки в певних місцях реального світу, наприклад в парку або

біля водойми. Крім того, додаток Pokémon GO обробляє зображення з камери

смартфона і накладає на нього додаткові елементи, створюючи так звану

доповнену реальність. На менш потужних пристроях режим доповненої реальності

недоступний і гравець бачить лише ігровий всесвіт, але, тим не менш, пов'язаний з

реальною картою місцевості:

65

Рисунок 3.1 – Вигляд екрану телефона з грою Pokémon GO

Католицька організація Fundacion Ramon Pane розробила гру Follow Jesus

Christ Go! ("Йди за Ісусом Христом"). Гра є аналогом гри "Покемон Го",У Follow

JC Go! присутній елемент доповненої реальності — події в грі мають прив’язку до

об’єктів в реальному світі. При наведенні камери на об’єкт в реальному світі, гравці

бачитимуть біблійних персонажів: Ісуса, Мойсея та інші пророків та святих.

Гравці мають пересуватися містом, орієнтуючись по карті, а гра

відстежуватиме місце перебування користувача завдяки GPS. Мета гри — зібрати

власну "Євангельську команду" (eTeam). Розробники втілили в Follow JC Go

мультиплеер з груповими завданнями. Також гравці можуть спілкуватися й

організовувати зустрічі в "реалі". Гра також пропонує перерватися на молитву

кожного разу, коли користувач проходить повз церкву.

Додаток доступний для завантаження на iOS і Android. Утім, наразі він

доступний тільки іспанською мовою, але розробки обіцяють додати підтримку

інших мов. Гру також продемонстрували Папі Римському Франциску, який

схвалив її, як "засіб християнізації молодих людей" та благословив її.

Правила Pokémon GO прості:

1. Ви запускаєте додаток, реєструєтеся і можете взаємодіяти з ним, якщо він

розгорнутий і екран вашого пристрою включений.

66

2. Основна форма взаємодії - збір покемонів шляхом кидання в них покеболл

(як правило, зловити покемона з першого разу не виходить).

3. Оскільки покемони не сидять на місці, а періодично спауняться в різних

локаціях, користувачам доводиться активно переміщатися по району або навіть

цілому місту, щоб ловити їх.

4. При цьому ви повинні поповнювати запас важливих ресурсів на

покестопах і можете боротися з іншими гравцями в тренажерних залах, які також є

об'єктами реального світу.

5. Пройдена відстань і кількість спійманих покемонів впливають на підняття

вашого рівня в грі.

3.1.2 Підготовка до розробки додатку типу Pokémon GO

Перш, ніж приступати до розробки, визначимо, що потрібно, щоб розробити

гру типу Pokémon GO:

1. Геймдізайн

Перед тим, як починати розробку гри, потрібен концепт і дизайн-документ

(технічне завдання). Зазвичай їх підготовкою займається гемй-дізайнер, який потім

супроводжує всі етапи розробки та ставить правильні завдання програмістам,

дизайнерам, художникам, звуковикам і т. д. Хо-роший геймдизайнер - справжня

знахідка, тому його робота коштує чимало.

2. Движок для розробки ігор

Що таке движок гри і навіщо він потрібен? Движок гри - це спеціальна

програма, яка з'єднує разом всі ресурси гри (програмний код, графіку, звуки) і

дозволяє ними керувати. Без движка можуть обійтися тільки дуже прості ігри (а

Pokémon GO до них не відноситься), до того ж движок спрощує випуск гри на

кілька мобільних платформ. Для розробки Pokémon GO використовувався движок

Unity.

3. Дизайн додатку

67

Робота над зовнішнім виглядом починається зі створення прототипу з усіма

екранами додатку. Прототип не є готовим додатком, він всього лише показує, які

розділи, меню та інші елементи будуть доступні користувачам. Прототипування

виконується в спеціалізованих інструментах, наприклад InVision, Proto.io, Pixate,

Flinto.

4. Картографічний сервіс та засоби геолокації

Оскільки до того, як стати окремою компанією, Niantic була внутрішнім

стартапом Google, ймовірно, для неї діють деякі специфічні умови використання

карт Google Maps, тому розробити клон Pokémon GO буде не так-то просто. У

загальному випадку для створення програми на кшталт Pokémon GO знадобиться:

1. Підключити Google API до проекту і заплатити за ліцензію (вартість буде

залежати від планованого навантаження). Також є можливість використовувати

безкоштовні карти Open Street Maps, але тоді про фотографії локацій доведеться

забути.

2. Написати функції для роботи з GPS пристроями (геолокація). Це потрібно

для того, щоб визначати місцеположення пристрою користувача і показувати

показувала йому потрібні об'єкти.

5. Логіка розподілу об'єктів на карті і логіка взаємодій

Для досягнення природності знадобиться добре опрацьована логіка

розподілу об'єктів на карті. У ній необхідно передбачити:

• Як часто на карті будуть з'являтися нові покемони.

• У яких локаціях які покемони зустрічаються найчастіше і в який час доби.

• Як популярність місць впливає на типи покемонів, які там зустрічаються, а

також їх кількість.

Логіка взаємодії персонажів (в нашому випадку альтернативна бою) -

важлива частина розробки гри. Її суть в тому, щоб новачкам не було занадто

складно, а бувалим гравцям не було занадто легко в грі. Після впровадження логіка

обов'язково тестується на практиці.

6. Засоби взаємодії з гіроскопом і акселерометром

68

Щоб визначати положення пристрою в просторі і швидкість руху людини

(зокрема, їде він в автомобілі або пересувається пішки), використовуються дані з

вбудованих в смартфон датчиків:

• гіроскоп - визначає орієнтацію пристрою в просторі.

• акселерометр - визначає швидкість, з якою прискорюється смартфон.

• GPS - визначає розташування користувача щодо сітки глобального

позиціонування.

7. Сервер для реалізації взаємодії між користувачами і збереження їх ігрових

даних

Так як в грі користувачі знаходяться в одному ігровому світі, на одній карті і

підкорюються загальним правилам - цей світ повинен десь генеруватися, постійно

розвиватися і взаємодіяти з ними. Таким місцем є наш сервер, і всі програми

взаємодіють один з одним через нього.

Також щоб після перепрошивки або зміни пристрою користувачам не

потрібно було починати гру заново, потрібно зберігати їх дані у себе на сервері. Без

зберігання даних на сервері розробити Pokémon GO-аналог не вийде, тому будьте

готові створити сильний і надійний бекенд гри.

Також слід врахувати, що сервери і бази даних повинні витримувати високі

навантаження, щоб користувачам не доводилося довго чекати можливості зіграти:

8. Нотифікації про події

Realtime-події дозволяють негайно отримувати сповіщення про те, що

відбувається в грі. Оскільки в Pokémon GO потрібно грати з включеним екраном,

користувач відразу ж бачить нотифікації і підказки.

Realtime-події реалізують за допомогою Socket-з'єднання, що позволяє

миттєво в двосторонньому режимі обмінюватися даними з гравцем, коли він

онлайн. У разі, якщо користувач знаходиться оффлайн, сервер може відправляти

push-повідомлення через сторонні сервіси, які надходять з невеликою затримкою.

9. Внутрішньо ігрові покупки

69

Існує кілька моделей заробітку для мобільного стартапу і Pokémon GO

використовує модель з внтурішньо ігровими покупками (in-app purchases).

Купувати можна предмети на зразок покеболов (Poké Balls), приманку (Lure

Module), інкубатор (Egg Incubator) та інші. Є як більш дешеві ґва-Ріанта (20

покеболов за 100 монет), так і більш дорогі (6 приманок за 680 монет). Це важливо,

оскільки як допомагає новачкам легше зробити свою першу покупку, так і заохочує

бувалих гравців робити покупки побільше.

Покупку внутршньо іігрового контенту краще реалізовувати за допомогою

нативного сервісу під кожну платформу окремо. Користувачі схильні більше

довіряти таким сервісам. Наприклад, якщо ви розробляєте додаток під Android,

найзручніше скористатися Google Play In-app Billing. Скориставшись цим сервісом

ви легко в подальшому зможете наповнювати додаток продаваним контентом з

консолі розробника, а не оновлювати його зайвий раз.

10. Графіка і звук

Сучасні ігри встановлюють надзвичайно високі вимоги до якості графіки. З

огляду на те, що в Pokémon GO використовується тривимірна графіка, за її

розробку доведеться віддати чималу частину бюджету. Також краще, щоб

підготовка моделей велася паралельно з написанням коду. Як варіант, можна

купити моделі в Unity Asset Store, але це вкрай небажано, оскільки позбавляє вашу

гру індивідуальності і не допоможе вам зробити Pokémon GO-аналог досить

яскравим і незабутнім.

Крім того, слід врахувати причини успіху Pokémon GO:

• Відомий бренд Pokémon, у якого вже були свої фанати.

• Досвід в сфері ігор, які використовують доповнену реальність (Ingress).

Розробка аналога Pokémon GO потребує багато ресурсів в силу відсутності

відкритого доступу до даних, напрацьованим Ingress.

• Гра вимагає постійної уваги до себе, що сприяє формуванню звички. Це

необхідно врахувати, щоб розробити успішний аналог Pokémon GO.

70

• Добре пророблений вірусний механізм: якщо з'явився покемон, потрібно

відразу ж його ловити; оскільки додаток працює тільки з включеним екраном, люди

постійно помічають інших гравців і втягуються самі.

3.2 Розробока гри «Іспит, граючи»

3.2.1 Концепція гри

Для вивчення принципів роботи з інструментом Unity в даній роботі буде

розроблена відеогра з доповненою реальністю, що використовує служби геолокації

для прив'язки інформації (модель вченого-покемона) до реальної точки на

місцевості.

Завданням групи студентів буде створити свою віртуальну команду відомих

вчених-екзаменаторів (аналогів-покемонів). Протягом цієї пригоди ви зможете

дізнатися про галузь науки або певну дисципліну, виконати місії, допомогти тим,

хто потребує, зібрати предмети та артефакти та зв’язатися зі своїми друзями!

Ви зможете зібрати команду відомих науковців з певної царини науки, але

для цього вам доведеться точно відповісти на деякі питання, виконати завдання та

тести, що стосуються цієї дисципліни.

Ігровий процес і механіка

Здебільшого графіка не має бути ключовим компонентом цієї гри, спрощена

естетика складає жанр сам по собі, що, безумовно, подобається деяким людям.

Подібні ігри просто не можна порівняти з іншими іграми на основі геолокації.

Механіка гри може бути різною – або ви, як зазвичай просто показуєте

пальцями по екрану, щоб оглянути карту, або буквально переміщаєте телефон, щоб

обертатися навколо карти, що робить взаємодії дуже цікавими!

Якщо говорити про взаємодії, то всі взаємодії в грі стосуватимуться різних

галузей Науки та Техніки. Чи то через перегляд того, що ми будемо називати

"освітніми" відеороликами чи вивченням матеріалу підручників, щоб збирати

71

"Аури" або очки та бали через відповіді на окремі питання або виконання тестів,

кожна взаємодія стосуватиметься певонї галузі науки і техніки.

Зміст питань і тестів залежить від того, здає студент іспит з певної

дисципліни чи проводиться перевірка залишкових знань студнта з певної

спеціальності (тобто комплексні питанння та тести). Створення контенту тестових

завдань є окремим завданням. Можна використовувати відомі он-лайн сервіси,

подібні до наведених в розділі 1. Наприклад, Ньютон може спитати щодо поліному

Ньютона (якщо йдеться про обчислювальну маьематику) або про закони механіки

(якщо про Прикладну механіку). У випадку швидкої відповіді або розв’язку теста

вчений надасть вам підказку щодо місця знаходження наступнорго вченого

(покемона). Для відпочинку і обмірковування відповідей в грі треба передбачити у

людних місцях «покезупинки», де можна знайти цінні предмети

У вашого персонажа (якого ви можете обрати з поміж велиикої кількості

аватарів) є духовність, здоров'я, голод та спрага. Протягом усіх ваших пригод ви

повинні гарантувати, що тримаєте ці показники на гідному рівні. Для цього можна

слухати різні розповіді про історію або філософію науки, допомогати друзям, тощо.

Тоді як гравець пересувається реальним світом, його аватар подорожує

картою завдяки використанню GPS. Якщо поряд знаходиться вчений-покемон, гра

повідомляє про це і пропонує відшукати його, користуючись камерою смартфона

чи планшета. Зображення покемона накладається на картинку навколишнього

світу, отриману з камери. Іноді очки аури та бали відшукуються так само, як і

покемони, за них відбуваються внутрішньоігровий обмін їх на корисні речі, які

прискорюють прогрес гравця. Всі такі обміни і знахідки складаються до інвентаря,

який вміщує певну кількість (500 у грі Покемон го) предметів. Покемони-вчені

мають різну складність тестів, позначену кольором кільця навколо них.

Знаходячи або вирощуючи нових покемонів, розвиваючи їх і беручи участь

у змаганнях, гравець віртуально збільшує свій рівень розвитку, отримуючи нові

можливості. Йому стає до снаги знаходити все сильніших вчених-покемонів (з

більш рейтинговими або простішими питаннями -тестами), винагорода зростає.

72

Досягши певного рівня, він може долучитися до однієї з команд «тренерів», які

змагатимуться між собою.

Інші особливості

Гра дозволятиме спілкування між гравцями в грі, що досить цікаво. Ви

можете з’єднуватися із співгрупниками, спілкуватися з ними тощо.

Гра не є суто розважальною, її метою є досягти того, щоб перевірка знань

проходила у цікавій і активній формі. При її плануванні не малось на увазі, що гра

охопить людей поза громадою кампуса університету, але для тих, хто цікавиться

наукою і певною цариною техніки, це здається хорошим способом перевірити свої

знання та повеселитися з однолітками!

Додаток передбачає прогулянку кампусом університету для зустрічі та

запрошення якомога більшої кількості ігрових персонажів на eTeam; додаток має

використовувати соціальну взаємодію, текстові повідомлення та відображати

фізичні зустрічі користувачів у різних місцях, щоб здійснювати допомогу членам

своєї команди або інші завдання, змагаючись з ними і залучаючи інші eTeams.

Здоров’я вимірюється набутими рівнями води, хліба та духовності.

У додатку показано різні рейтинги гравців, і гравці також можуть запросити

інших реальних людей, а також персонажів, яких вони зустріли, бути в їхніх

командах знавців певних розділів науки і техніки.

3.2.2 Процес разробоки гри на движку Unity. Створення карти

Для початку необхідно встановити Unity на робочий комп'ютер. Для даного

проекту досить безкоштовної версії. Після натискання на кнопку «безкоштовне

завантаження» відбувається скачування установника Unity. Цей інсталятор важить

менше 1 Мб і всі необхідні файли скачує після початку установки.

Крім самої Unity на комп'ютер встановлюється Mono Develop (IDE для

написання сценаріїв Unity), він використовується в Unity за замовчуванням, однак

в налаштуваннях можна змінити параметр (Рисунок 3.2) і використовувати Visual

73

Studio (попередньо необхідно встановити плагін для інтеграції з Unity). Там же, як

видно з малюнка, необхідно вказати шлях до Android SDK, JDK, NDK, для

компіляції гри під ОС Android.

При запуску, Unity пропонує провести авторизацію (це необхідно для роботи

з Asset Store з Unity), для цього необхідно спочатку створити обліковий запис (якщо

натиснути на словосполучення «create one» в браузері відкриється сайт

https://accounts.unity3d.com/sign-up , де і відбувається реєстрація нових

користувачів Unity), але, якщо немає необхідності використовувати Asset Store,

можна вибрати пункт «Work offline» (Рисунок 3.4). Далі можна вибрати один з

існуючих проектів (поряд з ім'ям проекту написана версія Unity в якій він був

створений) або створити новий (Рисунок 3.4). Для створення нового проекту

потрібно натиснути на кнопку «New», після чого потрібно буде ввести ім'я проекту,

шлях до нього, вибрати режим 3D або 2D, а також є можливість вибрати стандартні

набори ресурсів, для імпорту в проект (Рисунок 3.5).

Рисунок 3.2– Вікно налаштувань Unity

Після створення проекту відкриється порожня сцена, в якій буде тільки один

об'єкт - камера. Для початку потрібно зберегти сцену, для цього в меню «File» є

пункт «Save Scene». Для того щоб в майбутньому звертатися до сцен на ім'я, краще

дати їм зрозумілі імена, тому ця сцена називається «MainLevel». У вікні Project

(Рисунок 3.6) можна працювати з файлами проекту: імпортувати (шляхом

перенесення або через пункт "import package» у відповідному меню), створювати

74

файли, папки (для зручності зазвичай створюють окрему папку під кожен тип

об'єктів: для скриптів, матеріалів, спрайтів і т.д.), переміщати файли (між папками,

в сцену з папки проекту і навпаки).

Рисунок 3.3 – Створення нового проекта

Після цього створюється нова папка з ім'ям «Scenes», і в неї поміщається

сцена MainLevel. Решта папок створювалися у міру необхідності. Папка Standard

Assets містить імпортований з Asset Store однойменний набір.

Завантаження карти

Завантажимо карту, потім поставимо на неї точки появи "покемонів-вчених".

Точки будемо вантажити з xml-документа, який покладемо на google-drive. Також

зробимо просту взаємодію між покемонами і нейтралами. У грі реалізуємо

можливості використання Gps-координати реального телефону.

Ресурс Мап-квест,

75

Рисунок 3.4 – Ресурс Map Quest

Рисунок 3.5 – Вибір координат міста

Реєстрація на мап квeст

76

Рисунок 3.6 – Реєстрація на Map Quest Вибір

Створення My application

Рисунок 3.7 – Додаток в Application Creator

Відкриваємо Unity

77

Рисунок 3.8 – Проект в Unity

Loadmap.cs

Рисунок 3.9 – Завантаження карти в проект Unity

url –адреса

Рисунок 3.10 – Заиис url адреси в проекті Unity

Здійсюємо load image

78

Рисунок 3.11 – Завантаження зображння карти в Скрипт

Завантаження карти

Рисунок 3.12 – Завантаження карти в проект Unity

Точка на карті google

79

Рисунок 3.13 – Створення точки на Google Map

3.2.3 Отримання координат ігрока (location service)

Продовжуємо працювати в Unity

Рисунок 3.14 – Занесення скриптів і даних в проект Unity

Скрипт Text.location

80

Рисунок 3.15 –Скрипт Text.location в проекті Unity

Рисунок 3.16 – Скрипт Text.location

Game helper

81

Рисунок 3.17 – Відображення точки гравця у вікні Unity

Рисунок 3.18 – Позиція гравця в скрипті

Location service

82

Рисунок 3.19 – Вікно Location service

Статус game helper

Рисунок 3.20 – Іініалізація статусу Location service

координати

83

Рисунок 3.21 –Визначення координат гравця

Отримуємо координати ігрока

Рисунок 3.22 – Гравець на карті у вікні Unity

Сайти з моделями покемонів

Оскільки створювана версія гри є тестовою, то в якості моделей вчених-

покемонів будемо використовувати моделі покемонів, які є в достатній кількості і

є безкоштовними. Надалі треба буде розробити моделі вчених-покемонів бажаного

вигляду. Наприклад Ньютон:

84

Рисунок 3.23 – Модель Ньютона

Рисунок 3.24 – Сайт Пикачу

Завантажуємо моделі в Unity

85

Рисунок 3.25 – Завантаження моделей в Unity

Моделі на карті

Рисунок 3.26 –Розміщення модлей на карті в Unity

3.2.4 Розміщення точок на карті

86

Рисунок 3.27 – Сайт Location Service Start

Завантажуємо бібліотеку LocationService, та вставляємо частину тестового

коду, який ми підстроюємо під нашу гру. Даний код працює наступним чином,

спочатку йде перевірка на те, чи працює геолокація на мобільному пристрої, якщо

працює то йде запит на дозвіл використання геолокації для даного сервісу, і

перевіряє чи зміг мобільний телефон під’єднатися до серверу за 20 секунд, якщо

ні, вибиває помилку “time out”. Далі йде заключна перевірка того, чи сервіс

геолокації відповідає корректно, і в такому випадку виконує код самої гри.

87

Рисунок 3.28 – Тестовий код геолокації

Після створення нового спрайта з текстурою, ініціюємо початок роботи з

бібліотекою геоданих, спочатку об’являємо старт роботи командою

Input.location.Start(5, 5). Аргументи що передає функція задають точність

положення гравця в метрах.

88

Рисунок 3.29 – Задання положення гравця в метрах

Для урахування координат гравця використовується комплексна формула з

документації до бібліотеки

Рисунок 3.30 – Відображння уточненого положеня гравця у вікні Unity

Тепер при запуску програми можна бачити що на плоский об’єкт накладається

текстура карти міста, дана текстура є динамічною і буде змінюватись в залежності

від позиції гравця

89

Рисунок 3.31 – Рендерінг карти в місцях знаходження гравця

Даний код відповідає за рендеринг карти в тих координатах де знаходиться

гравець.

Та файл, що завантажився розміщується в спрайт текстури з заданими

параметрами розширення та формату, у тому випадку якщо не з’явилась помилка

завантаження.

90

Рисунок 3.32 – Скрипт спрайта тектсури

Метод Reset виконуються коли ігрок переміщуються на певну відстань, і

перераховує координати гравця, для перемальовування карти, щоб створити ефект

руху точки на кій карті, при цьому дана точка є статичною.

Рисунок 3.33 – Скрипт перепрахування координат гравця

Заключна частина коду необхідна для зміни розміру карти що

завантажуються в телефон, в залежності від розміру екрану.

91

Рисунок 3.34 – Об’єкт на карті

Тепер, коли ми помістимо будь який об’єкт на карту ми зможемо бачити його

розташування на ній

Будемо використовувати в якості серверної частини Google Drive Unity.

Додаток буде завантажувати з google drive xml файл і за його даними будемо

вибудовувати точки на нашій карті, залежно від того які точки були записані у

файлі.

Рисунок 3.35 – Завантаження з google drive xml файлу

92

З файлу отримуємо дані про всіх покемонів, їх тип, позицію по осях x, y.

Отримати дані з файлу можна тільки за його id, який належить нам.

Рисунок 3.36 – Точка на карті з xml файлу google drive

93

Рисунок 3.37 – Скрипт даних з сервера google drive

Скрипт, з якого ми будемо брати основні дані для подальшого редагування є

спріптом завантаження даних з сервера. Скрипт розміщений на мапі, в ньому є

посилання на Google Drive і ID нашого файлу,

Вводимо дані в консоль і записуємо дані, що прийшли з файлу в змінну _xml

Далі Парсимо xml

94

Прередаємо текст в ХМL документ, беремо елемент pokemons, потім беремо

елемети з елемента pokemons і це буде масив всіх покемонів (елементів).

Перебираємо всіх покемонів, зберігаємо дані про покемонів в змінних,

(атрибути елементів приходять нам в файлі, ми їх перебираємо і зберігаємо в

змінних).

Рисунок 3.38 – Папки завантажені в Unity

Створюємо класи для зручного форматування даних, створюємо скрипт, моделі

не повинні успадковуватися ні від чого.

Беремо з нього type int

Створюємо новий клас (енумератор)

Додаємо туди імена покемонів

95

Задаємо позицію і характеристики покемонів

Lat - позиція х

Lon - позиція у

Exp - рівень

Damage - шкоди

Health - життя

Заносимо вручну ці параметри покемонів в файл xml

Створюю List моїх покемонів, яких я отримав з сервера.

Створюємо module покемони

Передаємо в нього атрибути. Конвертуємо srting в тип int, після цього додаємо

id, Lat

Lon типу Single (float) Damage Exp Health конвертуємо в тип int.

96

створюємо Prefabs

Рисунок 3.39 – Меню з вибором префаба

І додаємо їм компоненти

97

Рисунок 3.40 – Компоненти префабів

Так виглядає папка Prefabs

Рисунок 3.41 – Моделі покемонів

Перебираємо PokemonModels (моделі покемонів)

98

Методом Setlocation отримуємо (item.Lan, item.Lon, item.Origint) після цього

кожен покемон стане на потрібну позицію

Зберігаємо модель на тому об'єкті, який інстантіейтім

Ініціюємо масив створених на мапі покемонів, які вже розміщені на мапі

Отримуємо доступ до game_Helper для коррдінат GPS

Створюємо перевірку для виконання

Перевіряємо роботу нашого додатку

99

Рисунок 3.42 – Відображення додатку з покемонами у вікні Unity

3.2.5 Доповнена реальність без міток

Розмістимо моделі покемонів-вчених на реальному місці. 3Д персонаж має

стояти на рівні горизонту, так щоб при повороті мобільного телефону він

залишався на одному місці.

Рисунок 3.43 – Вигляд екрана смартфона з покемоном

100

Рисунок 3.44 – Вигляд екрану з об’єктами доповненої реальності

В даному проекті використовуються не методи розпізнавання, а акселерометр і

компас для постановки об'єкта на рівень горизонту.

Акселерометр дозволяє відстежити повороти мобільного.

Рисунок 3.45 – Кути повороту телефона

Зачення кутів поворотів навколо осей телефона отримаємо за допомогою компаса

101

Рисунок 3.46 – Застосування компаса

Задаючи камері в ігровій сцені кути повороту будемо отримувати ефект доп.

реальності.

Подібні ефекти можна отримати за допомогою гіроскопа, проте вони є не на

всіх телефонах). Гіроскоп повертає ті ж значення кутів, що і компас і акселерометр.

Створюємо проект, в якому на реальному тлі поставимо 3д моделі покемона,

який буде стояти на рівні землі.

Беремо проект з камерою яку будемо крутити.

Рисунок 3.47 – Камера для поворпота у проекті Unity

102

Робимо проект під I-phone включаємо режим AR в Unity.

Пишемо скрипт – визначаємо змінні camera rotation (рисунок 3.48)

Рисунок 3.48 – Визначення зміної camera rotation

Якщо під андроїд, то перевіряємо підтримку гіроскопа. Створюємо метод для

підтримки доп реальності.

Робимо кнопку Вкл. / Викл доп. реальності. Калібруємо камеру. Визначаємо

змінну обертання камери.

Запускаємо Unity, і дивимося - камера дивиться вниз під заданим кутом rotation

90 градусів

103

Рисунок 3.49 – Перевірка кута камери в Unity

Подивитися, як це реально буде виглядати можна буде тільки на смартфоні

Тепер для створення фону треба взяти відео. Створимо background камеру,

налаштуємо її.

Рисунок 3.50 – Створення background камери

Виставляємо текстури. Запустимо і подивимося

Блакитне має замінитися

104

Рисунок 3.51 – Створення текстур

моїм зеленим відео (Тому що real sense дає картинку глибини).

Рисунок 3.52 – Поява зеленого відео програміста

Після запуску на телефоні білий кубик (майбутня модель) буде стояти на землі.

105

Рисунок 3.53 – Постанова білого куба на землі

Є спеціальні сети, які роблять тіні з картинок і спеціальні шейдери, які теж

дозволяють робити тіні. Треба перевірити, щоб ці шейдери працювали на

мобільному.

Рисунок 3.54 – Кінцевий вигляд проекта в Unity

106

3.2.6 Анімація персонажа

Unity надає розробникам відмінний інструмент для роботи з анімацією. У

персонажа вже є компонент Animator (рисунок 3.55). Тепер треба зробити анімації

і налаштувати контролер анімації.

Рисунок 3.55– Налаштування компонента Animator

Для створення анімації в Unity використовується вікно Animation. Можна

анімувати будь-який параметр будь-якого компонента об'єкта, наприклад, його

положення (параметр Position компонента Transform), або замінити спрайт в

компоненті Sprite Renderer. Вікно Animation складається з часової шкали, де будуть

розміщуватися ключові кадри, кнопки: пуск, стоп, запис, додати ключовий кадр,

додати подію, до наступного ключового кадру, до попереднього ключового кадру,

а також зі списку аніміруємих параметрів (рисунок 3.56).

Рисунок 3.56 – Створення анімації персонажа

107

Отже, для створення анімації потрібно натиснути кнопку запису, вибрати

параметри значення, яких необхідно змінити в процесі анімації, додається

ключовий кадр, змінюється значення параметра, додається ще один ключовий кадр

і т.д. В даному випадку змінюється спрайт персонажа. Для анімації ходьби

використовується 7 кадрів, 4 кадри з яких різні, а 3 повторюються для створення

повного циклу анімації, а для анімації стрибка і бездіяльності всього 2 кадри.

Параметр Samples визначає швидкість анімації (кількість кадрів в секунду).

Тепер необхідно налаштувати контролер анімації (рисунок 3.57). Для цього

в Unity використовується вікно Animator. Контролер анімації описує порядок і

умови відтворення анімацій. Стан (анімація) PlayerIdleAnim (анімація

бездіяльності) встановлюється за умовчанням (тобто ця анімація буде

відтворюватися першою). Стан Any State має перехід в PlayerJumpAnim (анімація

стрибка), це означає що з будь-якого стану можна перейти в стан стрибка. Для

опису переходів використовуються додаткові параметри, такі як Speed (швидкість),

Ground (булева змінна визначає чи стоїть персонаж на землі), vSpeed (вертикальна

швидкість).

Рисунок 3.57 – Налаштування контролера анімації

108

Далі необхідно написати сценарій персонажа. У ньому будуть міститися його

властивості (здоров'я, швидкість пересування), а також методи впливу на нього

(отримання шкоди, знищення персонажа при значенні здоров'я менше 0 або 0).

3.2 Графичний інтерфейс користувача (GUI) в Unity

Графічний інтерфейс користувача є важливою частиною ігор, без нього не

обходиться жодна з них. Головне меню, підказки, написи, смужка здоров'я і багато

інших елементів - все це GUI. Потрібно зробити смужку здоров'я (зазвичай це

прямокутник, частина якого заповнена кольором, розмір цієї частини залежить від

кількості здоров'я персонажа і при повному здоров'ї він зафарбований повністю,

також колір може змінюватися від розміру цієї частини, наприклад, ставати

червоним при низькому значенні здоров'я), щоб гравець завжди бачив скільки у

його персонажа, а також у противників здоров'я. Смужки здоров'я бувають різної

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

напис, який відображає числове значення здоров'я персонажа. У даній грі буде

виконана прямокутна смужка здоров'я з написом (рисунок 3.58).

Рисунок 3.58 – Смужка здоров’я

Вона складається з двох частин: об'єкти Image і Text, які розміщуються на

полотні (об'єкт Canvas; є батьківським для Image і Text).

109

Рисунок 3.59 – Налашьування компонента UI Image

Параметр Source Image задає зображення, Color - колір, який буде

накладатися на зображення, а Material задає матеріал (рисунок 3.59).

Компонент Text має параметри: Font (шрифт тексту), Font Style (стиль

шрифту: жирний, курсив), Font Size (розмір шрифту), Alligment (задає

вирівнювання тексту), Color (колір тексту) і деякі інші.

Рисунок 3.60 – Налаштування Рисунок 3.61 – Параметри сценарія по-

компонента UI Text родження ворогів

Після налаштування всіх елементів необхідно написати сценарій, який буде

змінювати значення поточного значення здоров'я. У цьому сценарії є функція, яка

виконує оновлення параметрів вмісту Text і Image, і ця функція викликається в

момент отримання шкоди персонажем. Ця ж смужка здоров'я буде

використовуватися і для ворогів.

Далі необхідно зробити аудіо менеджер (рисунок 3.63). Він дозволяє

впорядкувати всі звуки в грі, таким чином всі налаштування знаходяться в одному

110

місці, а відтворення звуків задається шляхом виклику функції PlaySound, яка в

якості параметра приймає рядок (назва аудіозаписи). Параметр Volume задає

гучність, а Pitch - тон. Також щоб урізноманітнити звукову картину можна задати

значення параметрів RandomVolume і та RandomPitch;

Рисунок 3.62 – Компоненти Рисунок 3.63 – Аудіо менеджер

обєкта Button

на їх основі генерується випадкове число (від 0 до RandomVolume), яке змінить

(збільшить або зменшить) початкове значення Volume. Параметр Size задає розмір

масиву аудіозаписів.

Наразі, коли основні моменти гри реалізовані необхідно зробити головне

меню.

Висновки до розділу

1. Була розроблена освітня відеогра на основі технології доповненної реальності,

що використовує прив'язку до об'єктів реального світу і карти, на кшталт ві-домої

111

гри Pokemon Go, при доробці якої можна з отримати гіднуосвітню гру. Були

отримані знання про внутрішній устрій, а також досвід розробки на Unity.

2. Було з'ясовано роль компаса, аккселерометра і гіроскопа для постано-вки об'єкта

на рівень горизонту,

3. Вивчена можлівість портувания даної гри під будь-яку платформу (яка

підтримує Unity), з невеликими витратами і незначними змінами в коді.

112

4. РОЗРОБЛЕННЯ СТАРТАП-ПРОЕКТУ ЗА ТЕМОЮ МАГІСТЕРСЬКОЇ

ДИСЕРТАЦІЇ

4.1 Опис ідеї проекту онлайн програми

Таблиця 4.1 – Опис ідеї стартап-проекту

Зміст ідеї Напрямки застосування Вигоди для користувача

«Залік» - квест гра у

віртуальному

середовищі з

набором тестових

завдань з предметної

області

1. Освіта. Можливість навчатися у

цікавій формі

2. Онлайн сервіс. Можливість отримання

знань дистанційно

3. Реклама. Залучення та

зацікавлення абітурієнтів

Опис до таблиці 4.2:

W – слабка сторона;

N – нейтральна сторона;

S – сильна сторона.

Таблиця 4.2 – Визначення сильних, слабких та нейтральних характеристик ідеї

проекту

п/п

Техніко-

економічні

характе-

ристики

ідеї

(потенційні) товари/концепції конкурентів W N S

«Залік»

zSpace

AlchemyVR

1

Об’єкти

застосува-

ння

Учбові аудиторії

+ дистанційно

Дистанцій

но будь-де

Учбові

аудиторії +

113

2 Контакт-

центр + + + +

3 Вартість

додатку

Умовно

безкоштовно,

платний акаунт -

7$

Умовно

безкоштов

но, акаунт

- 10$

Безкоштовно +

4 Абон.плата

сервісу 0.5$/міс 3.85$/міс - +

4.2 Технологічний аудит ідеї проекту

Таблиця 4.3 – Технологічна здійсненність ідеї проекту

п/п Ідея проекту

Технології її

реалізації

Наявність

технологій

Доступність

технологій

1 Контакт-

центр

«Контакт-

центр по

запиту»

послуга 0-800

наявна доступна

2 Персональний

онлайн сервіс

«студент Бот-

АН»

необхідно

розробити доступна

114

4.3 Аналіз ринкових можливостей запуску стартап-проекту

Таблиця 4.4 – Попередня характеристика потенційного ринку

п/п Показники стану ринку (найменування) Характеристика

1 Кількість головних гравців, од 7

2 Динаміка ринку (якісна оцінка) Зростає

3 Наявність обмежень для входу (вказати

характер обмежень) відсутні

5 Середня норма рентабельності в галузі

(або по ринку), % 81%

Таблиця 4.5 – Характеристика потенційних клієнтів стартап-проекту

Потреба, що

формує ринок

Цільова

аудиторія

(цільові

сегменти

ринку)

Відмінності у поведінці

різних потенційних

цільових груп клієнтів

Вимоги

споживачів до

товару

Якісне

програмне

забезпечення,

для роботи в

Інтернет

мережі.

Люди, які

прагнуть

навчатися,

студенти

ВНЗ,

викладачі

Тощо

Залежно від цільової групи

програмне забезпечення

може бути безкоштовним,

або умовно безкоштовним.

- надійність

- доступність

- простота

- зручність

- швидкість

115

Таблиця 4.6 – Фактори загроз

№ Фактор Зміст загрози Можлива

реакція компанії

1 Незацікавленість

клієнтів

Внаслідок невдалого

маркетингу клієнт може не

зацікавитись послугами

Внесення

додаткових

сервісних послуг

та зниження цін

2 Втрата монополії Втрата рангу єдиного гаранту

якості технології

Якісне та

кількісне

нарощування

інтенсивності

Таблиця 4.7 – Ступеневий аналіз конкуренції на ринку

Особливості

конкурентного

середовища

В чому проявляється дана

характеристика

Вплив на діяльність

підприємства (можливі

дії компанії, щоб бути

конкурентоспроможною)

1.Монополія Інноваційний тип послуг Стандартизація на

високому рівні

2.Локальний Відсутність єдиного

національного постачальника

послуг

Окремий підхід до

кожної локальної

ділянки

3.Міжгалузева Конкуренція з іншими галузями Необхідність

співробітництва в

окремих сегментах

4.Товарно-

видова

Вбудовані модулі обробки схожі,

які реалізовані програмно

За необхідності,

використання кодів

подібного типу

116

5.Цінова Можливість заощадити за

допомогою діагностики потреб

користувача

Гнучка політика цін

6.Марочна Кожна діагностика має бути

стандартизованою

Отримання монополії

над стандартом

синхронізації

Таблиця 4.8 – Аналіз конкуренції в галузі за М. Портером

Скла-

дові

ана-

лізу

Прямі

конкуренти в

галузі

Потенційні

конкуренти

Постачаль-

ники

Клієнти Товари-

замінники

Технологічні

постачальники

Необхідність

пошуку

постачаль-

ників

Залучення

малопопул

ярних

постачаль

ників

Незалеж-

ність у

прийнятті

клієнтсь-

ких рішень

Надання

переваги

більш

авторите-

тним

компаніям

Висн

овки:

Незначна Можливість

виходу на

ринок є

Постачаль-

ники

диктують

цінову

політику

на свої

послуги

Клієнти

диктують

вимоги до

якості

Обмежен-

ня існують

лише у

разі

відмови

від

продукта

117

Таблиця 4.9 – Обґрунтування факторів конкурентоспроможності

№ Фактор

конкурентоспроможності

Обґрунтування (наведення чинників, що

роблять фактор для порівняння

конкурентних проектів значущим)

1 Раціональніший ціновий

показник

Можливість більш раціонально

використати ресурсів

2 Надання персональних

сервісних послуг 24/7

Сервісна підтримка апаратної та

програмної частини

3 Синхронізованість Синхронізація з усіма ОС.

4 Спектр застосувань Використання для ряду потреб

користувачів.

Таблиця 4.10 – Порівняльний аналіз сильних та слабких сторін онлайн

програми

№ Фактор конкуренто-

спроможності

Бали

1-20

Рейтинг товарів-конкурентів у

порівнянні

-3 -2 -1 0 1 2 3

1 Раціональніший

ціновий показник 13 +

2 Надання персональних

сервісних послуг 24/7 15 +

3 Синхронізованість 20 +

4 Спектр застосувань 17 +

118

Таблиця 4.11 – SWOT-аналіз стартап-проекту

Сильні сторони: надання

персональних сервісних послуг 24/7,

синхронізованість

Слабкі сторони: раціональніший

ціновий показник

Можливості: використання для ряду

потреб користувачів

Загрози: незацікавленість клієнтів,

втрата монополії

4.4 Розроблення ринкової стратегії проекту

Таблиця 4.12 – Вибір цільових груп потенційних споживачів

№ Опис профілю

цільової групи

потенційних

клієнтів

Готовність

споживачів

сприйняти

продукт

Орієнтовний

попит в

межах

цільової

групи

(сегменту)

Інтенсив-

ність

конкурен

ції в

сегменті

Простота

входу у

сегмент

1 Викладачі Середня Високий Високий Середня

2 Студенти Високий Високий Середній Середня

3 Люди, що прагнуть

навчатися,

абітурієнти

Високий Високий Середній Середня

Які цільові групи обрано: викладачі та студенти

119

Таблиця 4.13 - Визначення базової стратегії розвитку

№ Обрана альтернатива

розвитку проекту

Стратегія

охоплення

ринку

Ключові

конкурентос-

проможні

позиції від-

повідно до

обраної

альтернативи

Базова

стратегія

розвитку

1 Створення гаранту

якості державного

рівня

Встановлення

єдиного

універсального

Веб-додатка

Розробка і

випуск

власних

програм

Стратегія

диференціації

2 Дешевизна проекту Раціональніші

витрати на

обладнання, та

послуги

Маловідомі

партнери з

надаванням

послуг в

сфері ІТ.

Стратегія

лідерства по

витратах

Таблиця 4.14 – Визначення базової стратегії конкурентної поведінки

№ Чи є проект

«пер-

шопрохідцем»

на ринку?

Чи буде компанія

шукати нових

споживачів, або

забирати існуючих

у конкурентів?

Чи буде компанія

копіювати основні

характеристики

товару конкурента,

і які?

Стратегія

конку-

рентної

поведінки

1 ні Забирати

існуючих та

шукати нових

Характеристики

апаратної частини

Стратегія

виклику

лідера

120

Таблиця 4.15 – Визначення стратегії позиціонування

№ Вимоги до товару

цільової аудиторії

Базова стратегія

розвитку

Ключові

конкуренто-

спроможні

позиції

власного

стартап-

проекту

Вибір

асоціацій, які

мають сфо-

рмувати

комплексну

позицію

власного

проекту (три

ключових)

1 Висока якість послуг Стратегія

диференціації

Синхронізова-

ність

Якість,

надійність,

сервісність

2 Мінімальні витрати Стратегія

лідерства по

витратах

Широкий

спектр

застосування

Дешевизна,

раціональність,

тех. підтримка

4.5 Розроблення маркетингової програми стартап-проекту

Таблиця 4.16 – Визначення ключових переваг концепції потенційного товару

№ Потреба Вигода, яку пропонує

товар

Ключові переваги перед

конкурентами (існуючі або

такі, що потрібно створити

1 Якість Висока якість,

сервісність

сервісність

2 Дешевизна Раціональне

використання коштів

дешевизна

121

Таблиця 4.17 – Опис трьох рівнів моделі товару

Рівні

товару

Сутність та складові

І. Товар за

задумом

Дешеві послуги, стандартизована якість послуг

ІІ. Товар у

реальному

виконанні

Властивості/характеристики: М/Нм Вр/Тх

/Тл/Е/Ор

1) Варстість обслуговування,

2) Кількість елементів

3) Строк безвідмовної праці

4) Технологічна собівартість

товару

1) М

2) М

3) М

4) М

1)Е

2) Пр

3)Нд

4)Тх

Якість: держстандарт якості, високоякісні технології

ІІІ. Товар із

підкрі-

пленням

До продажу – програмне забезпечення

Після продажу – персональний онлайн сервіс

Таблиця 4.18 – Визначення меж встановлення ціни

№ Рівень цін на

товари замінники

Рівень цін на

товари

аналоги

Рівень доходів

цільової групи

споживачів

Верхня та нижня

межі встановлення

ціни на

товар/послугу

1 70-500 у.о./од 5-250 у.о./од Високий Н.50 у.о. –

В.180 у.о.

122

Таблиця 4.19 – Концепція маркетингових комунікацій

№ Специфіка

поведінки

цільових

клієнтів

Канали

комунікацій,

якими

користуютьс

я цільові

клієнти

Ключові

позиції,

обрані для

позиціонува

н-ня

Завдання

рекламного

пові-

домлення

Концепція

рекламного

звернення

1 Зацікавле-

ність в

якісному

продукті з

раціональ-

ним

використан

-ням

ресурсів

Мережні

ресурси

Синхронізов

аність з

будь-якими

ОС

Зацікавити у

покращення

х пов’язаних

із

зростаючою

популярніст

ю товару та

послуг

Представленн

я продукції

відправною

точкою на

шляху до

безпеки

2 Зацікавле-

ність у

великій

кількості

продукту із

дотриман-

ням умов

якісності

Мережні

ресурси

Широкий

спектр

застосуван-

ня

Зацікавити у

позитивних

сторонах

Представленн

я якісної

роботи з

клієнтами

123

ВИСНОВКИ

У магістерській дисертації проведено дослідження доцільності застосування

ігрових форм навчання в педагогічній діяльності. Проаналізовано існуючі

інструментальні засоби для розробки освітніх ігор. На основі проведених

досліджень отримано такі результати:

1. Проаналізовано доцільність застосуванні ігрових форм навчання, так як

ігри дозволяють ефективно організувати творчу взаємодію викладача і студентів,

створюють умови для формування особистісних якостей.

2. Проаналізовано сучасні інструменти розробки освітніх ігор - Unity3D,

Unreal Engine. Для реалізації завдань магістерської дисертації обрано Unity3D.

Основною концепцією Unity3D є використання в сцені легко керованих об'єктів,

які, в свою чергу, складаються з великої кількості компонентів. Він показав себе як

дуже гнучкий, зручний і простий інструмент для створення ігор, що не вимагає

установки додаткового програмного забезпечення (для розробки гри

використовувався тільки Unity), при цьому значних недоліків при роботі з ним

помічено не було. Unity постійно розвивається і досить часто виходять нові версії

(в яких з'являються нові можливості, а також поліпшуються старі), тому деякі

аспекти даної роботи будуть неактуальні через деякий час.

3. Досліджено найкращі зразки ігор різних жанрів, і визначено критерії, яким

мають відповідати освітні ігри. Встановлено можливість впровадження систем

віртуальної і доповненої реальності для створення освітніх ігор.

4. Встановлено особливості розробки ігор з прив'язкою до об'єктів реального

світу і карти.

5. Також, була розроблена освітня відеогра на основі технології доповненної

реальності, що використовує прив'язку до об'єктів реального світу і карти, на

кшталт відомої гри Pokemon Go, при доробці якої можна з отримати гіднуосвітню

гру. Були отримані знання про внутрішній устрій, а також досвід розробки на Unity.

124

6. Було з'ясовано роль компаса, аккселерометра і гіроскопа для визначення

положення пристрою в просторі і швидкості руху людини.

7. Вивчена можлівість портувания даної гри під будь-яку платформу (яка

підтримує Unity), з невеликими витратами і незначними змінами в коді.

8. Запропоновано, в продовження розробки, додавання декількох типів

покемонів-вчених (або викладачів), використання вже ісеуючих он-лайн сервісів

для тстовиз завдань, доопрацювання меню (додати можливість налаштувань гри),

реалізацію системи поліпшень. Також можна зробити додаткові режими, додати

деякі неігрові персонажі і описати взаємодію з ними, а також доопрацювати сюжет

гри.

125

ПЕРЕЛІК ДЖЕРЕЛ ПОСИЛАННЯ

1. Game Engine // Unity. URL: http://unity3d.com

2. Джозеф Хокинг Unity в действии, мультиплатформенная разработка на C#

3. Unity3D // Хабрахабр. URL: https://habrahabr.ru/hub/unity3d/

4. A* Pathfinding Project. URL: http://arongranberg.com/astar/

5. Become a Developer // Brackeys. URL: http://brackeys.com/

6. Игровой дизайн, гейм дизайн (game design) // GameDev.ru – Разработка игр.

URL: http://www.gamedev.ru/gamedesign/terms/gameplay

7. Основные ошибки при проектировании главного меню игры // Хабрахабр.

URL: https://habrahabr.ru/post/195608/

8. Параллакс // Астронет. URL: http://astronet.ru/db/msg/1178033

9. Создание игр. Один в поле воин! Игрострой GCUP. 2013 // http://gcup.ru...

10. Создание игр. О начинающем разработчике инди-игр. Игрострой GCUP.

2013 // http://gcup.ru...

11. Конструктор игр. Википедия - свободная энциклопедия. - 2013 //

http://ru.wikipedia.org/wiki/...

12. Создание 3D игр на языке Blitz3D. Blitz-school - центр обучения созданию

компьютерных игр. - 2013 // http://www.blitz-school.info/

13. Несколько популярных игровых движков и конструкторов игр. 3D Graphics

and me - блог о 3d графике и разработке игр, статьи, уроки, аналитика. 2013

// http://3dg.me/ru/gamedev/...

14. Перечень коммерческих игровых движков. Википедия - свободная

энциклопедия. - 2013 // http://ru.wikipedia.org/wiki/...

15. Games software revenues to reach $110 billion by 2018. [Electronic resource] /

James Brightman.– Access mode: http://www.gamesindustry.biz/articles/2015-

05-04-games-software-revenues-to-reachusd110-billion-by-2018-digi-capital. –

08.11.2015.

126

16. Bethke, E. Game development and production [Теxt] / E. Bethke. – Wordware

Publishing, Inc, 2003.– 415 с. – ISBN 1-55622-951-8.

17. Rogers, S. Level Up [Теxt] / S. Rogers.– John Wiley & Sons, Ltd, 2010. – 492 с.

– ISBN 978-0-470-68867-0.

18. Unity, Source 2, Unreal Engine 4, or CryENGINE- Which Game Engine Should

I Choose? [Electronic resource] / Mark Masters. – Access mode: http://blog.dig-

italtutors.com/unity-udk-cryengine-gameengine-choose/.– 08.11.2015.

19. Game engine. [Electronic resource] :Материал из Википедии – свободной

энциклопедии :Версия 68823161, сохранённая в 06:59 UTC 24 февраля 2015

/ Авторы Википедии // Википедия,свободная энциклопедия. – Электрон.

дан. – Сан-Франциско: Фонд Викимедиа, 2015. –

https://en.wikipedia.org/wiki/Game_engine.– 08.11.2015.

20. Video games starting to get serious. [Electronic resource] / Steve Barberich. –

http://www.gфzette.net/stries/083107/businew11739_32356.shtml. 08.11.2015

21. Physics engines survey results. [Electronic resource]/ Real–Time Physics Simu-

lation. –http://bulletphysics.org/wordpress/?p=88.– 08.11.2015.

22. Another million unity developers in the house.[Electronic resource] / David

Helgason. –http://blogs.unity3d.com/2013/07/09/anothermillion-unity-develop-

ers-in-the-house. – 08.11.2015.

ДОДАТОК А

Abstarct

124

Unity is a cross-platform game engine developed by Unity Technologies, which

is primarily used to develop both three-dimensional and two-dimensional video

games andsimulations for computers, consoles, and mobile devices. First announced

only for OS X at Apple's Worldwide Developers Conference in 2005, it has since been

extended to target 27 platforms. Six major versions of Unity have been released. For a

list of games made with Unity, visit List of Unity games.

Unity is a multipurpose game engine that supports 2D and 3D graphics, drag-and-

drop functionality and scripting using C#. Two other programming languages were sup-

ported:Boo, which was deprecated with the release of Unity 5 and JavaScript which

started its deprecation process in August 2017 after the release of Unity 2017.1.

The engine targets the following graphics APIs: Direct3D on Windows and Xbox

One; OpenGL on Linux, macOS, and Windows; OpenGL ES on Android and

iOS; WebGL on the web; and proprietary APIs on the video game consoles. Additionally,

Unity supports the low-level APIs Metal on iOS and macOS and Vulkan on Android,

Linux, and Windows, as well as Direct3D 12 on Windows and Xbox One.

Within 2D games, Unity allows importation of sprites and an advanced 2D world

renderer. For 3D games, Unity allows specification of texture compression, mipmaps,

and resolution settings for each platform that the game engine supports, and provides

support for bump mapping, reflection mapping, parallax mapping, screen space ambient

occlusion (SSAO), dynamic shadows using shadow maps, render-to-texture and full-

screen post-processing effects.[7] Unity also offers services to developers, these are: Unity

Ads, Unity Analytics, Unity Certification, Unity Cloud Build, Unity Everyplay, Unity

IAP, Unity Multiplayer, Unity Performance Reporting and Unity Collaborate.

Unity supports the creation of custom vertex, fragment (or pixel), tesselation,

compute shaders and Unity's own surface shaders using Cg, a modified version of Mi-

crosoft's High-Level Shading Language. Unity supports building to 27 different plat-

forms.

The platforms are listed in the following: iOS, Android, Tizen, Windows, Universal

WindowsPlatform, Mac, Linux, WebGL, PlayStation4, PlayStationVita, Xbox One, Wii

125

U, 3DS, Oculus Rift, Google Cardboard, Steam VR, Play Station VR, Gear VR, Win-

dows Mixed Reality, Daydream, AndroidTV, Samsung Smart TV, tvOS, Nintendo

Switch, Fire OS, Facebook Gameroom, Apple ARKit, Google AR Core, and Vuforia.

Unity formerly supported seven other platforms including its own Unity Web

Player. Unity Web Player was a browser plugin that was supported in Windows and OS

X only,] which has been deprecated in favor of Web GL

Unity is the default software development kit (SDK) for Nintendo's Wii U video

game console platform, with a free copy included by Nintendo with each Wii U developer

license. Unity Technologies calls this bundling of a third-party SDK an "industry first".

In 2012, VentureBeat said, "Few companies have contributed as much to the flow-

ing of independently produced games as Unity Technologies. ... More than 1.3 million

developers are using its tools to create gee-whiz graphics in their iOS, Android, console,

PC, and web-based games. ... Unity wants to be the engine for multi-platform games,

period."

For the Apple Design Awards at the 2006 WWDC trade show, Apple, Inc. named

Unity as the runner-up for its Best Use of Mac OS X Graphics category, a year after

Unity's launch at the same trade show. Unity Technologies says this is the first time a

game design tool has ever been nominated for this award. A May 2012 survey by Game

Developer magazine indicated Unity as its top game engine for mobile platforms. In July

2014, Unity won the "Best Engine" award at the UK's annual Develop Industry Excel-

lence Awards.

Unity 5 was met with similar praise, with The Verge stating that "Unity started

with the goal of making game development universally accessible.... Unity 5 is a long-

awaited step towards that future."

Following the release of Unity 5, Unity Technologies drew some criticism for the

high volume of quickly produced games published on the Steam distribution platform by

inexperienced developers. CEO John Riccitiello said in an interview that he believes this

to be a side-effect of Unity's success in democratizing game development: "If I had my

way, I'd like to see 50 million people using Unity – although I don't think we're going to

get there any time soon. I'd like to see high school and college kids using it, people outside

126

the core industry. I think it's sad that most people are consumers of technology and not

creators. The world's a better place when people know how to create, not just consume,

and that's what we're trying to promote."

In December 2016, Unity Technologies announced that they will change the ver-

sioning numbering system for Unity from sequence-based identifiers to year of release to

align the versioning with their more frequent release cadence.

On December 16, 2013, Unity Technologies Japan revealed new screenshots for

an official mascot character named Unity-chan (ユニティちゃん Yuniti-chan), real

name Kohaku Ōtori (大鳥 こはく Ōtori Kohaku) (voiced by Asuka Kakumoto), with ex-

hibit of the character in Comic Market 85 event in the Tokyo Big Sight between Decem-

ber 29 to the 31st, where themed goods would be distributed and her voice actress would

be present at the event. The character's associated game data were to be released in spring

2014. The character was designed by Unity Technologies Japan designer "ntny" as an

open-source heroine character. The company allows the use of Unity-chan and related

characters in secondary projects under certain licenses.[25] For example, Unity-chan ap-

pears as a playable character in Runbow. The popularity of the character also led to her

appearance in VOCALOIDadaptions, including her own sound library for VO-

CALOID4 and a special adaption of VOCALOID designed to work with the Unity En-

gine 5.0 version called Unity with VOCALOID.

127

Додаток Б

Скрипти

128

class TestLocationService :

using UnityEngine;

using System.Collections;

public class TestLocationService : MonoBehaviour {

IEnumerator Start()

{

// First, check if user has location service enabled

if (!Input.location.isEnabledByUser)

yield break;

// Start service before querying location

Input.location.Start();

// Wait until service initializes

int maxWait = 20;

while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)

{

yield return new WaitForSeconds(1);

maxWait--;

}

// Service didn't initialize in 20 seconds

if (maxWait < 1)

{

print("Timed out");

yield break;

}

// Connection has failed

if (Input.location.status == LocationServiceStatus.Failed)

{

print("Unable to determine device location");

yield break;

}

else

{

// Access granted and location value could be retrieved

print("Location: " + Input.location.lastData.latitude + " " +

Input.location.lastData.longitude + " " +

Input.location.lastData.altitude

+ " " + Input.location.lastData.horizontalAccuracy + " "

+ Input.location.lastData.timestamp);

}

// Stop service if there is no need to query location updates continuously

Input.location.Stop();

}

}

129

class SetGeolocation : MonoBehaviour

public class SetGeolocation : MonoBehaviour

{

public float lat;

public float lon;

public float orientation;

private float initX;

private float initZ;

private bool gpsFix;

private float fixLat;

private float fixLon;

private GameHelper _gameHelper;

void Awake()

{

_gameHelper = GameObject.FindObjectOfType<GameHelper>();

gpsFix = _gameHelper.GpsFix;

}

IEnumerator Start()

{

while (!gpsFix)

{

gpsFix = _gameHelper.GpsFix;

yield return null;

}

initX = _gameHelper.IniRef.x;

initZ = _gameHelper.IniRef.z;

yield return new WaitForSeconds(1);

GeoLocation();

}

void GeoLocation()

{

Vector3 pos = transform.position;

pos.x = (float)(((lon * 20037508.34) / 18000) - initX);

pos.z = (float)(((Mathf.Log(Mathf.Tan((90 + lat) * Mathf.PI / 360))

/ (Mathf.PI / 180)) * 1113.19490777778) - initZ);

pos.y = 0;

transform.position = pos;

Vector3 eAngles = transform.eulerAngles;

eAngles.y = orientation;

transform.eulerAngles = eAngles;

}

public void SetLoacation(float latitude, float longitude, float newOrientation)

130

{

lat = latitude;

lon = longitude;

orientation = newOrientation;

GeoLocation();

}

}

class LoadMap

public class LoadMap : MonoBehaviour

{

const string Key = "cydP18CWm7BCYetAANI4DOPcbl8ssckL";

public Renderer maprender;

Vector2 PlayerPosition =

new Vector2(50.437990f, 30.521626f); //Latitude, Longitude

// new Vector2(42.3627f, -71.05686f); //Latitude, Longitude

int _zoom = 17;

string _maptype = "map";

string _url;

void Start()

{

StartLoadMap(PlayerPosition);

}

private void StartLoadMap(Vector2 playerPosition)

{

_url = "http://open.mapquestapi.com/staticmap/v4/getmap?key=" + Key

+ "&size=1280,1280&zoom=" + _zoom

+ "&type=" + _maptype

+ "&center=" + PlayerPosition.x + "," + PlayerPosition.y;

// Debug.Log(_url);

StartCoroutine(LoadImage());

}

private IEnumerator LoadImage()

{

WWW www = new WWW(_url);

while (!www.isDone)

{

Debug.Log("progress = " + www.progress);

yield return null;

}

if (www.error == null)

131

{

Debug.Log("Updating map 100 %");

Debug.Log("Map Ready!");

yield return new WaitForSeconds(0.5f);

maprender.material.mainTexture = null;

Texture2D tmp;

tmp = new Texture2D(1280, 1280, TextureFormat.RGB24, false);

maprender.material.mainTexture = tmp;

www.LoadImageIntoTexture(tmp);

}

else {

Debug.Log("Map Error:" + www.error);

yield return new WaitForSeconds(1);

maprender.material.mainTexture = null;

}

maprender.enabled = true;

}

}

class PokemonHelper

public class PokemonHelper : MonoBehaviour

{

public PokemonModel MyPokemonModel { get; set; }

BattleHelper _battleHelper;

void Start()

{

_battleHelper = GameObject.FindObjectOfType<BattleHelper>();

}

// Update is called once per frame

void Update()

{

}

void OnTriggerEnter(Collider other)

{

if (!_battleHelper.IsBattle)

{

_battleHelper.StartBattele(MyPokemonModel);

}

// Destroy(gameObject);

}

public void LoadPokemon(PokemonModel item)

{

MyPokemonModel = item;

}

132

}

class PlayerHelper

public class PlayerHelper : MonoBehaviour

{

public PokemonModel MyPokemonModel { get; set; }

// Use this for initialization

void Start()

{

MyPokemonModel = new PokemonModel()

{

PokemonType = ETypes.Pikachu,

Health = 200,

Damage = 10,

Exp = 21

};

}

// Update is called once per frame

void Update()

{

}

}

class BattlePokemonHelper

public class BattlePokemonHelper : MonoBehaviour

{

public PokemonModel MyPokemonModel { get; set; }

public int MaxHealth { get; set; }

public int Health { get; set; }

public int Level { get; set; }

public string Name { get; set; }

public bool IsDead { get; set; }

// Use this for initialization

void Start()

{

}

// Update is called once per frame

void Update()

{

}

internal void Load(PokemonModel myPokemonModel)

{

133

MyPokemonModel = myPokemonModel;

MaxHealth = MyPokemonModel.Health;

Health = MyPokemonModel.Health;

Level = MyPokemonModel.Exp;

Name = myPokemonModel.PokemonType.ToString();

}

internal void TakeDamage(int damage)

{

int health = Health - damage;

if (health <= 0)

{

Health = 0;

IsDead = true;

}

Health = health;

}

}

class LoadPokemonData

using UnityEngine;

using System.Collections;

using System.Xml.Linq;

using System.Collections.Generic;

using System;

public class LoadPokemonData : MonoBehaviour

{

public GameObject[] PokemonPrefabs;

string _xml = "";

public List<PokemonModel> PokemonModels { get; set; }

public List<PokemonHelper> PokemonHelpers { get; set; }

GameHelper _gameHelper;

IEnumerator Start()

{

PokemonModels = new List<PokemonModel>();

PokemonHelpers = new List<PokemonHelper>();

_gameHelper = GetComponent<GameHelper>();

while (!_gameHelper.GpsFix)

{

Debug.Log("Wait!");

yield return null;

}

134

WWW www = new

WWW("https://docs.google.com/uc?id=0B8_KhHuqPhc6YU05aHpFdnA2Wms");

while (!www.isDone)

{

yield return null;

}

Debug.Log(www.text);

_xml = www.text;

XDocument doc = XDocument.Parse(_xml);

XElement element = doc.Element("pokemons");

IEnumerable<XElement> elements = element.Elements();

foreach (XElement item in elements)

{

PokemonModel pokemonModel = new PokemonModel();

///<pokemon type="0" lat="42.3637" lon="-71.05686"></pokemon>

int pokemonTypeInt = System.Convert.ToInt32(item.Attribute("type").Value);

pokemonModel.PokemonType = (ETypes)pokemonTypeInt;

pokemonModel.Id = System.Convert.ToInt32(item.Attribute("id").Value);

pokemonModel.Lat = System.Convert.ToSingle(item.Attribute("lat").Value);

pokemonModel.Lon = System.Convert.ToSingle(item.Attribute("lon").Value);

pokemonModel.Orint = System.Convert.ToSingle(item.Attribute("orint").Value);

pokemonModel.Exp = System.Convert.ToInt32(item.Attribute("exp").Value);

pokemonModel.Damage = System.Convert.ToInt32(item.Attribute("damage").Value);

pokemonModel.Health = System.Convert.ToInt32(item.Attribute("health").Value);

PokemonModels.Add(pokemonModel);

}

Debug.Log("PokemonModels.Count = " + PokemonModels.Count);

for (int i = 0; i < PokemonModels.Count; i++)

{

var item = PokemonModels[i];

GameObject pokemon = Instantiate(PokemonPrefabs[(int)item.PokemonType]);

SetGeolocation setGeolocation = pokemon.GetComponent<SetGeolocation>();

setGeolocation.SetLoacation(item.Lat, item.Lon, item.Orint);

PokemonHelper pokemonHelper = pokemon.GetComponent<PokemonHelper>();

pokemonHelper.LoadPokemon(item);

PokemonHelpers.Add(pokemonHelper);

}

135

}

// Update is called once per frame

void Update()

{

}

internal void DestroyPokemon(PokemonModel myPokemonModel)

{

PokemonHelper remove = null;

foreach (var item in PokemonHelpers)

{

if (item.MyPokemonModel.Id == myPokemonModel.Id)

{

remove = item;

}

}

Destroy(remove.gameObject);

PokemonHelpers.Remove(remove);

}

}

class GameHelper

public class GameHelper : MonoBehaviour

{

const string Key = "cydP18CWm7BCYetAANI4DOPcbl8ssckL";

const int WaitTime = 10;

public bool GpsFix { get; set; }

/// <summary>

/// Url propertyes

/// </summary>

string Url = "";

public Transform myMap;

int _multiplier = 2; //1 для size=640x640 tile, 2 для size=1280*1280

public Renderer maprender;

public Text StatusText;

public Vector2 PlayerPosition =

new Vector2(42.3627f, -71.05686f); //Latitude, Longitude

private double tempLat;

private double tempLon;

private Vector3 _iniRef;

136

public Vector3 IniRef

{

get { return _iniRef; }

set { _iniRef = value; }

}

int _zoom = 17;

string _maptype = "map";

private LocationInfo _loc;

float _download = 0;

public string Status { set { StatusText.text = value; } }

int _counter;

IEnumerator Start()

{

Input.location.Start(5, 5);

Input.compass.enabled = true;

Status = "Initializing Location Services..";

// Wait until service initializes

while (Input.location.status ==

LocationServiceStatus.Initializing &&

_counter < WaitTime)

{

yield return new WaitForSeconds(1);

Debug.Log("Wait " + _counter);

Status = "Wait " + _counter;

_counter++;

}

if (_counter >= WaitTime)

{

Status = "_counter >= WaitTime";

yield return new WaitForSeconds(4);

Application.Quit();

yield return null;

}

if (Input.location.status == LocationServiceStatus.Failed)

{

Status = "Input.location.status == LocationServiceStatus.Failed";

yield return new WaitForSeconds(4);

Application.Quit();

yield return null;

}

else

{

LocationInfo loc = Input.location.lastData;

137

Debug.Log("Input.location.lastData");

yield return new WaitForSeconds(2);

/// Только для телефонов --------------------------------------------------------

// PlayerPosition.x = loc.latitude;

// PlayerPosition.y = loc.longitude;

//Set Position

_iniRef.x = (float)((PlayerPosition.y * 20037508.34 / 180) / 100);

_iniRef.z = (float)(System.Math.Log(System.Math.Tan((90 + PlayerPosition.x)

* System.Math.PI / 360)) / (System.Math.PI / 180));

_iniRef.z = (float)((_iniRef.z * 20037508.34 / 180) / 100);

_iniRef.y = 0;

GpsFix = true;

///Все гуд

LoadMap(PlayerPosition);

}

InvokeRepeating("UpdateMyPosition", 1, 0.5f);

InvokeRepeating("UpdateMap", 1, 3f);

// InvokeRepeating("Orientate", 1, 0.05f);

}

public Transform Player;

private bool _mapLoaded;

public bool UpdatedPossition { get; set; }

private Vector3 _newUserPos;

void UpdateMap()

{

if (GpsFix && _mapLoaded && UpdatedPossition)

LoadMap(PlayerPosition);

}

const float DistanceMapUpdate = 2;

Vector2 _lastPlayerPosition;

void UpdateMyPosition()

{

if (GpsFix)

{

LocationInfo loc = Input.location.lastData;

/// Только для телефонов --------------------------------------------------------

// PlayerPosition.x = loc.latitude;

// PlayerPosition.y = loc.longitude;

if (Vector3.Distance(_lastPlayerPosition, Player.position) > DistanceMapUpdate)

UpdatedPossition = true;

// Debug.Log(" - " + Vector3.Distance(_lastPlayerPosition, Player.position));

_newUserPos.x = (float)(((PlayerPosition.y * 20037508.34 / 180) / 100) - _iniRef.x);

138

_newUserPos.z = (float)(System.Math.Log(System.Math.Tan((90 + PlayerPosition.x)

* System.Math.PI / 360)) / (System.Math.PI / 180));

_newUserPos.z = (float)(((_newUserPos.z * 20037508.34 / 180) / 100) - _iniRef.z);

Player.position = _newUserPos;

}

}

void Orientate()

{

//if (!simGPS && gpsFix)

//{

// heading = Input.compass.trueHeading;

//}

//else {

// heading = user.eulerAngles.y;

//}

}

private void LoadMap(Vector2 playerPosition)

{

_mapLoaded = false;

Url = "http://open.mapquestapi.com/staticmap/v4/getmap?key=" +

Key + "&size=1280,1280&zoom=" +

_zoom + "&type=" + _maptype +

"&center=" + PlayerPosition.x + "," + PlayerPosition.y;

_lastPlayerPosition = Player.position;

UpdatedPossition = false;

StartCoroutine(LoadMap());

}

private IEnumerator LoadMap()

{

WWW www = new WWW(Url);

while (!www.isDone)

{

_download = (www.progress);

Debug.Log("Updating map " + System.Math.Round(_download * 100) + " %");

Status = "Updating map " + System.Math.Round(_download * 100) + " %";

yield return null;

}

if (www.error == null)

{

Debug.Log("Updating map 100 %");

Debug.Log("Map Ready!");

Status = "Updating map 100 %\nMap Ready!";

139

yield return new WaitForSeconds(0.5f);

maprender.material.mainTexture = null;

Texture2D tmp;

tmp = new Texture2D(1280, 1280, TextureFormat.RGB24, false);

maprender.material.mainTexture = tmp;

www.LoadImageIntoTexture(tmp);

}

else {

print("Map Error:" + www.error);

Status = "Map Error:" + www.error;

yield return new WaitForSeconds(1);

maprender.material.mainTexture = null;

}

tempLat = PlayerPosition.x;

tempLon = PlayerPosition.y;

maprender.enabled = true;

ReSet();

ReScale();

_mapLoaded = true;

}

void ReSet()

{

Vector3 newPosition = new Vector3();

newPosition.x = (float)(((tempLon * 20037508.34 / 180) / 100) - _iniRef.x);

newPosition.z = (float)(System.Math.Log(System.Math.Tan((90 + tempLat)

* System.Math.PI / 360)) / (System.Math.PI / 180));

newPosition.z = (float)(((newPosition.z * 20037508.34 / 180) / 100) - _iniRef.z);

transform.position = newPosition;

}

void ReScale()

{

Vector3 newScale = myMap.localScale;

newScale.x = (float)(_multiplier * 100532.244f / (Mathf.Pow(2, _zoom)));

newScale.z = newScale.x;

myMap.localScale = newScale;

}

// Update is called once per frame

void Update()

{

}

}

140

класс PokemonModel

using UnityEngine;

using System.Collections;

public class PokemonModel

{

public int Id { get; set; }

public ETypes PokemonType { get; set; }

public float Lat { get; set; }

public float Lon { get; set; }

public float Orint { get; set; }

public int Exp { get; set; }

public int Damage { get; set; }

public int Health { get; set; }

public enum ETypes

{

Bulbasaur,

Charmander,

Squirtle,

Pikachu,

Pidgey,

Ivysaur

}

class loopScript

using UnityEngine;

using System.Collections;

public class loopScript : MonoBehaviour {

public GameObject chosenEffect;

public float loopTimeLimit = 2.0f;

void Start ()

{

PlayEffect();

}

public void PlayEffect()

{

StartCoroutine("EffectLoop");

}

141

IEnumerator EffectLoop()

{

GameObject effectPlayer = (GameObject) Instantiate(chosenEffect, transform.position,

transform.rotation);

yield return new WaitForSeconds(loopTimeLimit);

Destroy (effectPlayer);

PlayEffect();

}

}

class lightScript

using UnityEngine;

using System.Collections;

public class lightScript : MonoBehaviour

{

bool Impact = false;

public float Sqr;

// Use this for initialization

void Start ()

{

Impact = true;

gameObject.GetComponent<Light>().intensity = 7;

Sqr = gameObject.GetComponent<Light>().intensity * gameObject.GetCompo-

nent<Light>().intensity * (( gameObject.GetComponent<Light>().intensity < 0.0f ) ? -1.0f : 1.0f);

}

// Update is called once per frame

void Update ()

{

if (Impact)

{

gameObject.GetComponent<Light>().intensity -= (1.0f / Time.deltaTime) * Sqr

* .0001f;

if (gameObject.GetComponent<Light>().intensity <= 0)

{

Destroy (gameObject);

}

}

}

}

class LoadSceneOnClick

using UnityEngine;

using UnityEngine.SceneManagement;

using UnityEngine.UI;

using System.Collections;

142

using System.Collections.Generic;

public class LoadSceneOnClick : MonoBehaviour

{

public void LoadScene1() {

SceneManager.LoadScene ("etfx_explosions");

}

public void LoadScene2() {

SceneManager.LoadScene ("etfx_explosions2");

}

public void LoadScene3() {

SceneManager.LoadScene ("etfx_portals");

}

public void LoadScene4() {

SceneManager.LoadScene ("etfx_magic");

}

public void LoadScene5() {

SceneManager.LoadScene ("etfx_emojis");

}

public void LoadScene6() {

SceneManager.LoadScene ("etfx_sparkles");

}

public void LoadScene7() {

SceneManager.LoadScene ("etfx_fireworks");

}

public void LoadScene8() {

SceneManager.LoadScene ("etfx_powerups");

}

public void LoadScene9() {

SceneManager.LoadScene ("etfx_swordcombat");

}

public void LoadScene10() {

SceneManager.LoadScene("etfx_maindemo");

}

public void LoadScene11() {

SceneManager.LoadScene("etfx_combat");

}

public void LoadScene12() {

SceneManager.LoadScene("etfx_");

}

}

class DragMouseOrbit

using UnityEngine;

using UnityEngine;

using System.Collections;

[AddComponentMenu("Camera-Control/Mouse drag Orbit with zoom")]

public class DragMouseOrbit : MonoBehaviour

{

public Transform target;

public float distance = 5.0f;

143

public float xSpeed = 120.0f;

public float ySpeed = 120.0f;

public float yMinLimit = -20f;

public float yMaxLimit = 80f;

public float distanceMin = .5f;

public float distanceMax = 15f;

public float smoothTime = 2f;

float rotationYAxis = 0.0f;

float rotationXAxis = 0.0f;

float velocityX = 0.0f;

float velocityY = 0.0f;

// Use this for initialization

void Start()

{

Vector3 angles = transform.eulerAngles;

rotationYAxis = angles.y;

rotationXAxis = angles.x;

// Make the rigid body not change rotation

if (GetComponent<Rigidbody>())

{

GetComponent<Rigidbody>().freezeRotation = true;

}

}

void LateUpdate()

{

if (target)

{

if (Input.GetMouseButton(1))

{

velocityX += xSpeed * Input.GetAxis("Mouse X") * distance * 0.02f;

velocityY += ySpeed * Input.GetAxis("Mouse Y") * 0.02f;

}

rotationYAxis += velocityX;

rotationXAxis -= velocityY;

rotationXAxis = ClampAngle(rotationXAxis, yMinLimit, yMaxLimit);

Quaternion fromRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rota-

tion.eulerAngles.y, 0);

Quaternion toRotation = Quaternion.Euler(rotationXAxis, rotationYAxis, 0);

Quaternion rotation = toRotation;

distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel") * 5, distanceMin, dis-

tanceMax);

RaycastHit hit;

if (Physics.Linecast(target.position, transform.position, out hit))

{

distance -= hit.distance;

}

Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);

Vector3 position = rotation * negDistance + target.position;

transform.rotation = rotation;

144

transform.position = position;

velocityX = Mathf.Lerp(velocityX, 0, Time.deltaTime * smoothTime);

velocityY = Mathf.Lerp(velocityY, 0, Time.deltaTime * smoothTime);

}

}

public static float ClampAngle(float angle, float min, float max)

{

if (angle < -360F)

angle += 360F;

if (angle > 360F)

angle -= 360F;

return Mathf.Clamp(angle, min, max);

}

}

class UICanvasManager

using UnityEngine;

using System.Collections;

using UnityEngine.UI;

public class UICanvasManager : MonoBehaviour {

public static UICanvasManager GlobalAccess;

void Awake () {

GlobalAccess = this;

}

public bool MouseOverButton = false;

public Text PENameText;

public Text ToolTipText;

// Use this for initialization

void Start () {

if (PENameText != null)

PENameText.text = ParticleEffectsLibrary.GlobalAccess.GetCurrentPE-

NameString();

}

// Update is called once per frame

void Update () {

// Mouse Click - Check if mouse over button to prevent spawning particle effects while

hovering or using UI buttons.

if (!MouseOverButton) {

// Left Button Click

if (Input.GetMouseButtonUp (0)) {

// Spawn Currently Selected Particle System

SpawnCurrentParticleEffect();

}

}

if (Input.GetKeyUp (KeyCode.A)) {

145

SelectPreviousPE ();

}

if (Input.GetKeyUp (KeyCode.D)) {

SelectNextPE ();

}

}

public void UpdateToolTip(ButtonTypes toolTipType) {

if (ToolTipText != null) {

if (toolTipType == ButtonTypes.Previous) {

ToolTipText.text = "Select Previous Particle Effect";

}

else if (toolTipType == ButtonTypes.Next) {

ToolTipText.text = "Select Next Particle Effect";

}

}

}

public void ClearToolTip() {

if (ToolTipText != null) {

ToolTipText.text = "";

}

}

private void SelectPreviousPE() {

// Previous

ParticleEffectsLibrary.GlobalAccess.PreviousParticleEffect();

if (PENameText != null)

PENameText.text = ParticleEffectsLibrary.GlobalAccess.GetCurrentPE-

NameString();

}

private void SelectNextPE() {

// Next

ParticleEffectsLibrary.GlobalAccess.NextParticleEffect();

if (PENameText != null)

PENameText.text = ParticleEffectsLibrary.GlobalAccess.GetCurrentPE-

NameString();

}

private RaycastHit rayHit;

private void SpawnCurrentParticleEffect() {

// Spawn Particle Effect

Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);

if (Physics.Raycast (mouseRay, out rayHit)) {

ParticleEffectsLibrary.GlobalAccess.SpawnParticleEffect (rayHit.point);

}

}

/// <summary>

/// User interfaces the button click.

/// </summary>

/// <param name="buttonTypeClicked">Button type clicked.</param>

146

public void UIButtonClick(ButtonTypes buttonTypeClicked) {

switch (buttonTypeClicked) {

case ButtonTypes.Previous:

// Select Previous Prefab

SelectPreviousPE();

break;

case ButtonTypes.Next:

// Select Next Prefab

SelectNextPE();

break;

default:

// Nothing

break;

}

}

}

using UnityEngine;

using System.Collections;

public class PEDestoryTimed : MonoBehaviour {

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

}

}

using UnityEngine;

using System.Collections;

using UnityEngine.UI;

using UnityEngine.EventSystems;

public enum ButtonTypes {

NotDefined,

Previous,

Next

}

public class PEButtonScript : MonoBehaviour, IEventSystemHandler, IPointerEnterHandler,

IPointerExitHandler {

private Button myButton;

public ButtonTypes ButtonType = ButtonTypes.NotDefined;

147

// Use this for initialization

void Start () {

myButton = gameObject.GetComponent<Button> ();

}

public void OnPointerEnter(PointerEventData eventData) {

// Used for Tooltip

UICanvasManager.GlobalAccess.MouseOverButton = true;

UICanvasManager.GlobalAccess.UpdateToolTip (ButtonType);

}

public void OnPointerExit(PointerEventData eventData) {

// Used for Tooltip

UICanvasManager.GlobalAccess.MouseOverButton = false;

UICanvasManager.GlobalAccess.ClearToolTip ();

}

public void OnButtonClicked () {

// Button Click Actions

UICanvasManager.GlobalAccess.UIButtonClick(ButtonType);

}

}

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

public class ParticleEffectsLibrary : MonoBehaviour {

public static ParticleEffectsLibrary GlobalAccess;

void Awake () {

GlobalAccess = this;

currentActivePEList = new List<Transform> ();

TotalEffects = ParticleEffectPrefabs.Length;

CurrentParticleEffectNum = 1;

// Warn About Lengths of Arrays not matching

if (ParticleEffectSpawnOffsets.Length != TotalEffects) {

Debug.LogError ("ParticleEffectsLibrary-ParticleEffectSpawnOffset: Not all

arrays match length, double check counts.");

}

if (ParticleEffectPrefabs.Length != TotalEffects) {

Debug.LogError ("ParticleEffectsLibrary-ParticleEffectPrefabs: Not all arrays

match length, double check counts.");

}

// Setup Starting PE Name String

effectNameString = ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" +

CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")";

148

}

// Stores total number of effects in arrays - NOTE: All Arrays must match length.

public int TotalEffects = 0;

public int CurrentParticleEffectIndex = 0;

public int CurrentParticleEffectNum = 0;

// public string[] ParticleEffectDisplayNames;

public Vector3[] ParticleEffectSpawnOffsets;

// How long until Particle Effect is Destroyed - 0 = never

public float[] ParticleEffectLifetimes;

public GameObject[] ParticleEffectPrefabs;

// Storing for deleting if looping particle effect

private string effectNameString = "";

private List<Transform> currentActivePEList;

void Start () {

}

public string GetCurrentPENameString() {

return ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" + CurrentParti-

cleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")";

}

public void PreviousParticleEffect() {

// Destroy Looping Particle Effects

if (ParticleEffectLifetimes [CurrentParticleEffectIndex] == 0) {

if (currentActivePEList.Count > 0) {

for (int i = 0; i < currentActivePEList.Count; i++) {

if (currentActivePEList [i] != null) {

Destroy (currentActivePEList [i].gameObject);

}

}

currentActivePEList.Clear ();

}

}

// Select Previous Particle Effect

if (CurrentParticleEffectIndex > 0) {

CurrentParticleEffectIndex -= 1;

} else {

CurrentParticleEffectIndex = TotalEffects - 1;

}

CurrentParticleEffectNum = CurrentParticleEffectIndex + 1;

// Update PE Name String

effectNameString = ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" +

CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")";

}

public void NextParticleEffect() {

// Destroy Looping Particle Effects

149

if (ParticleEffectLifetimes [CurrentParticleEffectIndex] == 0) {

if (currentActivePEList.Count > 0) {

for (int i = 0; i < currentActivePEList.Count; i++) {

if (currentActivePEList [i] != null) {

Destroy (currentActivePEList [i].gameObject);

}

}

currentActivePEList.Clear ();

}

}

// Select Next Particle Effect

if (CurrentParticleEffectIndex < TotalEffects - 1) {

CurrentParticleEffectIndex += 1;

} else {

CurrentParticleEffectIndex = 0;

}

CurrentParticleEffectNum = CurrentParticleEffectIndex + 1;

// Update PE Name String

effectNameString = ParticleEffectPrefabs [CurrentParticleEffectIndex].name + " (" +

CurrentParticleEffectNum.ToString() + " of " + TotalEffects.ToString() + ")";

}

private Vector3 spawnPosition = Vector3.zero;

public void SpawnParticleEffect(Vector3 positionInWorldToSpawn) {

// Spawn Currently Selected Particle Effect

spawnPosition = positionInWorldToSpawn + ParticleEffectSpawnOffsets[CurrentParti-

cleEffectIndex];

GameObject newParticleEffect = GameObject.Instantiate(ParticleEffectPrefabs[Cur-

rentParticleEffectIndex], spawnPosition, ParticleEffectPrefabs[CurrentParticleEffectIndex].trans-

form.rotation) as GameObject;

newParticleEffect.name = "PE_" + ParticleEffectPrefabs[CurrentParticleEffectIndex];

// Store Looping Particle Effects Systems

if (ParticleEffectLifetimes [CurrentParticleEffectIndex] == 0) {

currentActivePEList.Add (newParticleEffect.transform);

}

currentActivePEList.Add(newParticleEffect.transform);

// Destroy Particle Effect After Lifetime expired

if (ParticleEffectLifetimes [CurrentParticleEffectIndex] != 0) {

Destroy(newParticleEffect, ParticleEffectLifetimes[CurrentParticleEffectIn-

dex]);

}

}

}

150

Додаток В

Перелік вільних і комерційних движків ігор

151

Вільні движки:

• Agar (англ.) - високорівнева каркас графічного додатку, викорис-зуемое для розробки як

2D, так і 3D комп'ютерних ігор.

• Axiom Engine - відгалуження, що містить в основі графічний движок OGRE.

• Boom - порт вихідного коду гри Doom від TeamTNT.

• CheapHack (англ.) - паче не розробляється движок на основі TomazQuake.

• Crystal Entity Layer - розширення движка Crystal Space 3D Engine.

• Crystal Space - повний каркас для розробки 3D додатків.

• DarkPlaces - один з багатьох удосконалених вільно поширеною-няемое Quake engines.

• Daybreak motor - об'єктно-орієнтована графічний движок для XNA (XNA 3d engine - Xbox,

Windows).

• Delta3D (англ.) - з'єднує інші добре відомі безкоштовні проекти в просте API, спочатку

розроблявся U.S. Navy.

• DGD - об'єктно-орієнтована MUD движок.

• Eternity Engine - вихідний порт движка гри Doom.

• Exult (англ.) - вільна реінкарнація ігрового движка Ultima VII.

• FIFE (англ.) - вільний 2D ISO движок, що підтримує ресурси Fallout 1 і 2.

• Game Blender - під-додаток Blender для створення ігор.

• Game Maker - об'єктно-орієнтований програмний продукт для раз-ництва ігор з drag-and-

drop інтерфейсом і своїм скриптовою мовою.

• GQ - движок гри Quake, який включає в себе фичи з TomazQuake і DarkPlaces.

• GZDoom - вихідні ігрового движка Doom, засновані на ZDoom.

• Genesis3D - 3D движок реального часу для Windows.

• GemRB - вільна реалізація Infinity Engine.

• HGE - Haaf's Game Engine, движок для створення 2D ігор.

• Jogre - клієнт / серверний ігровий движок, написаний на мові Java, з-тримає API для

онлайнових ігор реального часу, будь-то шашки, шахи, та інше.

• MGF - Mortem's Game Framework - активно розвивається ігровий фреймворк з відкритим

вихідним кодом для ігрової консолі PSP на мові С ++.

• MRPGe - ігровий движок для Visual Basic, для двомірних RPG-ігор, з вбудованим скрипт-

мовою. Вельми змінюємо на ранніх стадіях розробки.

• M.U.G.E.N - двомірний движок для ігор жанру файтинг (наприклад, Mortal Kombat).

• Multiverse Network - MMOG платформа, що включає сервер, клієнт, і ін-струментарій.

152

• Nebula Device - тривимірний ігровий движок реального часу, розробити конструкцію

танний німецької студією ігор Radon Labs.

• OctLight - ігровий движок на Java, що використовує scene-graph, і отрісови-вающий на базі

Lightweight Java Game Library (LWJGL), використовуючи OpenGL.

• OMEGA Engine - простий у використанні 2D движок. Використовує в якості рендера

Direct3D8 або OpenGL, для звуку - DirectSound.

• OSlib - Old School Library - бібліотека для портування старих ігор на PSP або написання 2D

ігор в стилі ігор минулих років на мові С ++.

• Pentagram - проект створює ігровий движок, який використовується в випущеної грі Ultima

VIII: Pagan.

• PLIB - ігровий движок, що включає в себе: трехмерку, звук, музику, гра-фические інтерфейс

користувача, менеджера вікон, і портіруемость на Linux / Windows / MacOSX.

• pH Engine - потужний і гнучкий ООП движок, що використовує Direct3D9 (Рендер),

DirectSound (Звук) і TCP / IP (Мережа). Можливість «нарощування» воз-можностей за

допомогою плагінів.

• ProQuake - вдосконалений движок гри Quake.

• QSP - популярний багатоплатформовий російський движок для створення ігор в жанрі

Interactive Fiction.

• RealmForge - ігровий движок з відкритим кодом для Microsoft .NET Framework, попередник

Visual3D.NET.

• rRenderer - ігровий движок сучасного рівня написаний на VB6, для DX8.

• Sauerbraten - вдосконалений движок, відгалуження від движка Cube.

• SmartX - ігровий движок використовує платформу .NET Framework. На-писаний на C #, але

є можливість інтеграції в мови підтримують технологію .NET.

• Storm3D - движок використовує Direct3D 9, написаний на С ++.

• Stratagus - багатоплатформовий ігровий движок для стратегічних ігор реального часу.

• Telejano - змінений движок гри Quake.

• URQ - популярний російський движок для створення ігор в жанрі Interactive Fiction.

• vbGORE - движок з відкритим вихідним кодом, на основі якого можна створити двомірну

онлайнову гру з деякими 3D ефектами.

• Yake - компонент-заснований, об'єктно-орієнтована, частково ро-довой движок, написаний

на C ++.

• ZDoom - один з багатьох початкових кодів Doom [7].

Комерційні движки:

153

• Arcane Engine - розроблений Wolfpack Studios для Shadowbane.

• Auran Jet - движок, розроблений австралійською компанією AURAN і використовуваний в

грі Trainz.

• Baja Engine - движок професійної якості, який використовується для гри The Lost Mansion.

• Blitz3D - графічний движок зі своєю мовою программіровнаія BlitzBasic.

• C4 Engine - з'являється ігровий движок наступного покоління від Еріка Ленгел.

• Dark engine - застарілий движок, використаний для ігор Looking Glass Studios.

• Earth-4 Engine - графічний движок, який використовується в Earth 2160.

• Explorations - творець двомірних MMO.

• IMUSE - спеціально розроблений движок для синхронізації музики з візуальними діями.

• KjAPI - технологія C ++ для створення ігор і тривимірних додатків для ПК.

• Medusa (ігровий движок) - ігровий тривимірний движок на C ++ розробити конструкцію

танний Palestar і використаний в грі DarkSpace MMO. У ньому є симуляція ігрового світу, єдиний

інструмент контролю версій, реалізація активів, кроссплатформенная підтримка і вбудована

система клієнт / сервер.

• Odyssey Engine - використаний для створення тривимірних рольових ігор, а також ігри Star

Wars: Knights of the Old Republic.

• ORE - онлайновий движок для рольових ігор.

• Quasar - ігровий об'єктно-орієнтований наступного поколе-ня, що розробляється компанією

Syide Technologies.

• Power Render - основна мета цього пакета - розробка ігор і тривимірних уявлень.

• Reality Engine - тривимірний ігровий движок компанії Artificial Studios.

• Retribution Engine - ігровий движок для створення ігор в стилі Екшн.

• Revolution3D - тривимірний графічний движок, розроблений X-Dream Project.

• Shark 3D - щось середнє між Spinor для ПК, відео іграми і тривимірними додатками

реального часу.

• Silent Storm engine - тривимірний ігровий движок для тактичних стратегій (напр. Silent

Storm).

• Torque Game Engine - змінена версія ігрового тривимірного движка, спочатку розроблена

Dynamix для гри 2001 FPS Tribes 2.

• TOSHI - багатоплатформовий ігровий движок четвертого покоління, раз-працюємо Blue

Tongue Entertainment.

• Truevision3d - тривимірний ігровий движок, що використовує DirectX API.

• Unigine - багатоплатформовий middleware.

154

• Unity (game engine) - легко використовуваний ігровий тривимірний движок.

• Vicious Engine - ігровий движок, портіруемость під Microsoft Windows, Sony PlayStation 2,

Microsoft Xbox, і Sony PlayStation Portable.

• 3DGame Studio - повноцінний ігровий конструктор, ціла система система для створення

тривимірних ігор.

• Visual3D.NET - тривимірна платформа для візуальної розробки окруже-ня, побудована на

Microsoft .NET 2.0 і XNA Framework для розробки під PC, Xbox 360, і пристроїв Windows Mobile

підтримує C #, Visual Basic, J # (Java), C ++. NET, JScript.NET, IronPython, і візуальне

скріптованія.

• Virtools - движок для створення ігор, тренажерів і симуляторів, 3D Internet і систем

віртуальної реальності.

• WGAF - ігровий движок, розроблений Guild Software, який вико-ється в їх MMORPG

Vendetta Online.

• White Engine - ігровий движок сьомого покоління, що належить Square-Enix, буде

використаний в їх проектах для PS3. Продумана можливість використання заздалегідь

намальовані якісної CGI графіки в реальному часі.

• Xors3d Engine - движок для створення тривимірних ігор. Почав свою сущест-вованіе як

динамічно підключається для Blitz3D, яка по-зволяет використовувати GAPI DirectX9.

• Zero - тривимірний ігровий движок, який використовується в Star Wars: The Clone Wars,

Star Wars: Battlefront, і Star Wars: Battlefront II.

• LyN engine - двигун компанії Ubisoft, який використовується у власних розроб-Ботках.

• Vicarious Visions Alchemy - движок компанії Intrinsic Graphics.

• Cry Engine 1-3 - ігровий движок, створений німецькою приватною компанією Crytek в 2002

році і спочатку використовуваний в шутере від першої особи Far Cry.

• Id Tech - сімейство ігрових движків, розроблених американської когось паніей id Software.

• Source - ігровий движок, розроблений корпорацією Valve. Його особливо-стями вважаються

модульна основа і гнучкість, синхронізація руху губ з промовою, технологія вираження емоцій і

система фізики, яка працює по мережі.

• Serious Engine - ігровий движок, розроблений хорватською компанією Croteam і вперше

використаний в грі Serious Sam 2001 року випуску. Тех-монолог перебувала в розробці протягом

трьох років. Згодом компа-нией Croteam були розроблені більш досконалі ігрові движки - Serious

Engine 2 і Serious Engine 3 [8].