Разработка мультимедийного интерактивного приложения с применением программного инструмента Unity

Сбор информации об Unity 3D. Подготовка программного обеспечения. Создание текстуры для создания локации. Подготовка модели для дальнейшего размещения. Создание местности с помощью редактора Unity 3D. Исследование на основании проделанной работы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2018
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

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

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

Целью дипломного проекта является создание небольшой игровой сцены, которую можно исследовать путем передвижения персонажа по локации. unity программный редактор текстура

Для достижения поставленной цели необходимо решить следующие основные задачи:

1. Собрать информацию об Unity 3D;

2. Подготовить программное обеспечение;

3. Написать краткую историю и описание локаций;

4. Создать/найти текстуры для создания локации;

5. Подготовить модели для дальнейшего размещения;

6. Создание местности с помощью редактора Unity 3D;

7. Провести исследование на основании проделанной работы.

Объект исследования: интерактивно мультимедийные приложения.

Предметом исследования являются графическая среда разработки Unity 3D.

Основными источниками для написания работы послужили электронные ресурсы, в частности сайты: habrahabr.ru и wikipedia.org, а так же книги Герберта Шилдта «Полный справочник по С#», и

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

Во введении обосновывается актуальность работы, цель, задачи, объект и предмет исследования.

Первая глава содержит информацию о мультимедиа в целом и играх в частности.

Вторая глава рассказывает про инструменты, использованные для разработки дипломного проекта.

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

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

В заключении сделаны основные выводы и результаты по проделанной работе.

1 Интерактивно-мультимедийные приложения

Мультимедиа достаточно обширная тема, темой диплома был взят аспект, начавший свою историю в 50-х годах. Для начала рассмотрим мультимедийность в общем виде.

1.1 Мультимедиа

Мультимедиа - это современная компьютерная информационная технология, позволяющая объединить в компьютерной системе текст, звук, видеоизображение, графическое изображение и анимацию (мультипликацию). Мультимедиа-это сумма технологий, позволяющих компьютеру вводить, обрабатывать, хранить, передавать и отображать (выводить) такие типы данных, как текст, графика, анимация, оцифрованные неподвижные изображения, видео, звук, речь. [1]

20 лет назад мультимедиа ограничивалась пишущей машинкой " Консул ", которая не только печатала, но и могла привлечь внимание заснувшего оператора мелодичным треском. Чуть позже компьютеры уменьшились до бытовой аппаратуры, что позволило собирать их в гаражах и комнатах. Нашествие любителей дало новый толчок развития мультимедиа (компьютерный гороскоп 1980 года который при помощи динамика и программируемого таймера синтезировал расплывчатые устные угрозы на каждый день, да еще перемещал по экрану звезды (зачатки анимации)). Примерно в это время появился и сам термин мультимедиа. Критическая масса технологий накапливается, появляется интернет, WWW, микроэлектроника. Человечество переживает информационную революцию. И вот мы становимся свидетелями того, как общественная потребность в средствах передачи и отображения информации вызывает к жизни новую технологию, за неимением более корректного термина называя ее мультимедиа. В наши дни -- это понятие может полностью заменить компьютер практически в любом контексте. В английском языке уже приживается новый термин information appliance - " информационное приспособление". [1]

1.2 Виды мультимедиа

В наше время существует множество мультимедийных объектов, каждый из которых имеет свои характеристики и историю. Далее будут выделены их основные виды:

· Текст - символы понятные человеку. Существуют различные кодировки содержащие символы, самая популярная на сегодняшний день: Unicode, поддерживает все общепринятые языки. Каждый символ кодируется 2 байтами.

· Изображения - объект, носящий только визуальный характер. Применимо в презентациях, для хранения фотографий, использование в качестве текстур, для создания анимации и прочие варианты. Изображения бывают трех типов:

o Растровая графика - основой таких изображений, является пиксель. Пиксель - наименьший логический элемент, являющийся точкой на экране;

o Векторная графика - основана на использовании геометрических примитивов, таких как: прямоугольники, треугольники, окружности и прочие двумерные фигуры;

o Трехмерная графика - такие изображения называются сценами, а композиции строятся с использованием мешей (mesh);

· Анимация - объект мультимедиа, содержащий в себе ряд изображений, сменяющих друг друга в ключевые моменты с течением времени. Разделяет те же типы, что и изображения. Применяется для создания видео, в развлекательных целях, для моделирования явлений различного характера;

· Аудио - объект хранящий звуковые дорожки и с помощью определенных инструментов, позволяющий прослушивать эти дорожки. Существует множество аудио-контейнеров, все со своими характеристиками. Применяется в развлекательных целях, для связи, создания видео и другие варианты;

· Видео - объекты, содержащие в себе одновременно все вышеперечисленное. Область применения широка: учебные материалы, фильмы, короткие видео развлекательного характера, презентации;

· Презентация - объект, способный содержать в себе текст, изображения, звук, анимацию и прочие мультимедийные объекты в целях создания представления о рассматриваемой предметной области;

· Игры - сложные программные продукты, является полностью интерактивной разновидностью мультимедиа, так как требует от пользователя постоянного вмешательства. Используется в развлекательных целях. Основой игр является визуальное представление процесса, но все взаимодействия созданы с использованием языков программирования.

1.3 Игры

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

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

Это касается не только компьютерных игр, о которых и пойдет речь в дальнейшем. Играя в те же шахматы, человек должен примерить на себя роль военачальника и стратега, для того, чтобы выйти победителем он должен проникнуться игрой, в которую играет и понять ее правила и тонкости.

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

Итак, компьютерные игры. Свою историю это отрасль начинает в 40-х годах, когда в академической среде разрабатывались симуляции и простые игры. Одним из первых известных развлекательных средств в 1947 году стал Ракетный симулятор, эта программа была очень похожа на игру.

Ракетный симулятор -- развлекательный аппарат на базе электронно-лучевой трубки, имитирующий управление полётом ракеты. Игровой процесс базируется на управлении лучом осциллографа и его расфокусировке для «поражения» целей, изображённых на помещаемой на экран накладке. Аппаратной частью в ракетном симуляторе является только аналоговая электроника, и у него нет исполняемой программы и запоминающего устройства. Так как отсутствует растровый тип изображения, что характерно для мониторов и телевизоров, то данное устройство считается электронной игрой, но не относится к видеоиграм. [2]

В 1948-1950 годах, Алан Тьюринг и Дэйвид Чампернаун разработали алгоритм шахматной игры. В то время не было достаточно мощного компьютера, чтобы исполнить этот алгоритм. [3]

В марте 1950 года Клод Шеннон разработал шахматную программу, которая появилась в статье «Программирование шахматных игр для компьютера», опубликованной в Philosophical Magazine. Это была первая статья о проблеме компьютерных шахмат. [3]

Только в 70-х годах игры начали приобретать популярность, в виду их распространения на массовую публику путем появления аркадных автоматов и домашних компьютеров. [3]

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

В 1989 году вышли в массовый доступ такие игры Prince of Persia, Golden Axe и некоторые другие, которые несли в себе сюжетную составляющую.

В 1994 вышла игра Warcraft: Orcs & Humans, стратегия в реальном времени, с которой началась история о мире, называемом «Азерот». В наше время данная вселенная имеет множество фанатов и почитателей, несколько игр жанра real time strategy, ММО-проект «World of Warcraft» и фильм «Варкрафт». Все это, приносит деньги компании «Blizzard Entertainment». На этом стоит перейти к коммерческой составляющей игр.

В наше время популярными разновидностями игр, являются:

· Action (Экшен) - игры основой которых является жестокое взаимодействие игрока с другими объектами. В таких играх успех зависит от скорости реакции и способности молниеносно принимать тактические решения. Отходя от компьютерных забав в реальный мир, такой жанр очень схож с игрой в пейнтбол, страйкбол, футбол, волейбол, баскетбол и прочее. Единственным отличием является отсутствие нагрузки на мышцы;

· RPG (Ролевые игры) - такие проекты отличаются проработанной историей (лором), сюжетом и большим количеством взаимодействий с окружающим миром. Опять же отходя от компьютерной сферы, такой жанр схож с прочтением книги или просмотром хорошего фильма. Тут главное, создание атмосферы, чтобы игрок имел возможность примерить на себя все происходящее;

· Strategy (Стратегии) - такой жанр требует от игрока собранности, логики и рассудительности. Играя в такие игры можно примерить на себя роль полководца, градостроителя или же владыки своего собственного государства. Разделяют два типа стратегий:

· Стратегии в реальном времени - такой жанр подразумевает не возможность остановить ход времени во время игры (исключением является меню паузы). Все решения принимаются сходу и тут нет времени посидеть и подумать.

· Пошаговые стратегии - игровой процесс разделен на такты, в каждом такте игрок может сделать ограниченный набор действий, после которого ход переходит оппоненту. Такой подход схож с игрой в шахматы.

· MMO (Массовая многопользовательская игра) - такой жанр подразумевает в первую очередь взаимодействие большого количества игроков в пределах одного выдуманного мира или игровой сессии.

Все перечисленные жанры могут переплетаться друг с другом от проекта к проекту, таким образом жанром игры может быть: MMORPG, action RPG или другие варианты.

Производство игр, это очень дорогостоящий процесс. К расходам относятся: программирование, моделирование, дизайн, услуги композитора, лицензии на ПО, реклама и многое другое. Правда есть такое направление, как «ИНДИ-разработка». Это способ разрабатывать игровой проект в рамках малочисленной команды при низких затратах на разработку. Таким образом, любой человек умеющий моделировать, программировать и имеющий фантазию может попытаться создать свой проект и продать его в рамках бейкерской компании или в раннем доступе.

Цены «ИНДИ-проектов» варьируются от 300р. (5$) до 600р. (10$) для России. Стоимость больших проектов, так называемых «AAA-проектов», в среднем составляет 60$. Такие проекты от момента появления его как идеи до полноценно развитой игры, разрабатываются по несколько лет, множеством программистов и дизайнеров, разных мастей и направленностей.

В рамках дипломного проекта, мою разработку пока сложно назвать «ИНДИ-проектом», так как у меня нет команды и процесс разработки замедлен из-за того, что вся работа выполняется одним единственным человеком. Целью все это, является исследование и подготовка плацдарма для будущей разработки игры. Я пытаюсь понять, что я хочу создать, понять какие работы необходимо будет выполнить (составить техническое задание), какие специалисты мне нужны.

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

2 Средства разработки приложения

2.1 Unity

Unity -- это инструмент для разработки двух- и трёхмерных приложений и игр, работающий под операционными системами Windows, Linux и OS X. Созданные с помощью Unity приложения работают под операционными системами Windows, OS X, Windows Phone, Android, Apple iOS, Linux, а также на игровых приставках Wii, PlayStation 3, PlayStation 4, Xbox 360, Xbox One и MotionParallax3D дисплеях (устройства для воспроизведения виртуальных голограмм), например, Nettlebox. Есть возможность создавать приложения для запуска в браузерах с помощью специального подключаемого модуля Unity (Unity Web Player), а также с помощью реализации технологии WebGL. [4]

Редактор Unity имеет простой Drag&Drop интерфейс, который легко настраивать, состоящий из различных окон, благодаря чему можно производить отладку игры прямо в редакторе. Движок поддерживает три сценарных языка: C#, JavaScript (модификация). Ранее была поддержка Boo (диалект Python), но его убрали в 5-ой версии. Расчёты физики производит физический движок PhysX от NVIDIA. [4]

Проект в Unity делится на сцены (уровни) -- отдельные файлы, содержащие свои игровые миры со своим набором объектов, сценариев, и настроек. Сцены могут содержать в себе как, собственно, объекты (модели), так и пустые игровые объекты -- объекты, которые не имеют модели («пустышки»). Объекты, в свою очередь содержат наборы компонентов, с которыми и взаимодействуют скрипты. Также у объектов есть название (в Unity допускается наличие двух и более объектов с одинаковыми названиями), может быть тег (метка) и слой, на котором он должен отображаться. Так, у любого объекта на сцене обязательно присутствует компонент Transform -- он хранит в себе координаты местоположения, поворота и размеров объекта по всем трём осям. У объектов с видимой геометрией также по умолчанию присутствует компонент Mesh Renderer, делающий модель объекта видимой. [4]

Опишу основные аспекты разработки игр с использованием Unity 3D.

2.1.1 Коллайдеры

Что это такое -- коллайдер? Коллайдер -- это область пространства, при взаимодействии с которой выполняются те или иные скрипты, действия. Чтобы лучше понять, что это такое, представьте, что вы подходите к автоматически открывающимся дверям универмага. За пару метров от дверей, срабатывает датчик и двери распахиваются перед вами, но если вы пройдете за три метра, то ничего не произойдет. Как раз та зона, в которой действует датчик движения, отвечающий за открывание дверей, и есть коллайдер. Вы входите в зону -- двери открываются, выходите из зоны -- и датчик уже никак не будет реагировать на ваше присутствие. Точно так же и в игре.

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

Это абсолютно не оптимально. Безусловно, нам не нужно генерировать столь большое количество коллайдеров, достаточно ограничиться одним!

Обратите внимание, что это не тонкость. Стараться сэкономить память нужно везде. У вас есть какое-то место в игре, куда игрок не сможет попасть? Не генерируйте никакие коллайдеры для этого места вообще. У вас есть дверь, которую вы импортировали в проект из 3Ds max'а? Небось, она очень хорошо прорисована (сам сталкивался с тем, что у двери даже шурупы были прорисованы отдельным объектом), значит, создайте один box-коллайдер для всей двери -- вы сэкономите много памяти! Поверьте, что вам эта сэкономленная память еще очень и очень пригодится.

2.1.2 Оптимальная работа со сценами

Поговорим об оптимизации сцен, о самих же сценах будет речь вестись далее.

Представьте следующую ситуацию: у нас есть сцена «home» -- когда игрок находится в здании и сцена «street» -- когда игрок выходит из здания на улицу. Естественно, из второй сцены мы можем видеть дом, т.е. часть первой сцены, и наоборот (если, конечно, у здания есть окна). В таком случае оптимально следующее построение сцен. В первой сцене все, что касается улицы (т.е. того места, куда мы не можем попасть без перехода на другую сцену) надо максимально упростить. Иными словами, нам нужно оставить только внешний вид вида из окна, а всю начинку -- распотрошить. Т.е. все коллайдеры удалить, разрешение и т.п. свести к минимуму. Действительно, зачем процессору напрягаться с обработкой той местности, которую мы не можем посетить? Аналогичным образом поступаем со второй сценой («street»). В данном случае мы можем вообще все удалить из дома и оставить только его «коробку».

Вы хотите создать minimap? Пожалуйста, только избавьтесь от всех коллайдеров и снизьте разрешение, в таком случае ваша игра будет оптимальна.

Именно таким образом работа со сценами становится оптимальной. Еще раз отмечу, что это не тонкости, это серьезные вещи, которые требуют внимания создателя.

2.1.3 Сцены

Готовая игра -- это набор сцен, соединенных между собой (точно так же, как и жизнь -- это набор дней). Об оптимальном проектировании игры мы сейчас и поговорим.

Прежде чем создать свой проект -- подумайте, что он должен в себя включать (какие сцены). Составьте список сцен (на листочке), обдумайте, что каждая сцена будет в себе содержать. Теперь постарайтесь каждую сцену разбить на подсцены, чем больше их будет, тем легче будет вашему ЦП. Конечно, не стоит перебарщивать с количеством сцен. Предположим, что ваш игрок находится в здании и из него никогда не выходит, в здании есть, например, пару этажей, крыша, а на каждом этаже имеется три комнаты. В данном случае, по моему мнению, было бы оптимально «разбить» здание на две сцены -- два этажа и крыша. Дробление же каждого этажа на сцены с комнатами -- не оптимально. Это просто не нужно, если каждая из комнат слабо загружена. Иными словами, надо грамотно расходовать память процессора, но и забывать о получении удовольствия от игры тоже не стоит.

2.1.4 Отладка

Помните, что хороший создатель должен учитывать то, что его игра, либо приложение, будет использоваться на различных ЭВМ, а это означает, что свой контент необходимо отладить так, чтобы он мог использоваться на различных устройствах. Самый очевидный и важный момент отладки -- оптимизация приложения под различные разрешения экранов. Это важный момент и создатель игры обязательно должен обратить на него свое внимание, в противном случае, результатом своей работы сможет быть доволен только он один.

2.1.5 Структурирование

При конструировании игры важно помнить о структурировании данных -- немаловажном аспекте. Имеется ввиду, что все должно быть на своем месте. Создаете скрипты? -- создайте папку для скриптов, там и храните их, с большой вероятностью, у вас будет не один скрипт, разбрасывать их по всему проекту не есть хорошо, сами потом будете мучиться. По своему опыту могу сказать, что вам точно понадобится создать папки со скриптами, звуковыми файлами, с GUI текстурами, материалами, анимациями, быть может, префабами и собственными моделями (импортированные из 3Ds max'а объекты лучше хранить именно в последней папке, дабы не разбрасывать все модели по проекту в хаотичном порядке). Когда вы создаете тот или иной скрипт, помните о том, что название переменных, классов и т.п. должны говорить все сами за себя. Если вы хотите создать скрипт для инвентаря (поднять предмет, использовать предмет), то лучше все скрипты однообразных действий (например, поднятия) начинать с ключевого слова, например: Catch<имя предмета>; Use<имя предмета>, в таком случае вам будет легче ориентироваться в проекте, да и выглядит так намного симпатичнее.

2.2 Adobe Photoshop

Adobe Photoshop -- многофункциональный графический редактор, разработанный и распространяемый фирмой Adobe Systems. В основном работает с растровыми изображениями, однако имеет некоторые векторные инструменты. Продукт является лидером рынка в области коммерческих средств редактирования растровых изображений и наиболее известным продуктом фирмы Adobe. В настоящее время Photoshop доступен на платформах macOS, Windows, в мобильных системах iOS, Windows Phone и Android. [5]

Этот редактор использовался для создания, изменения и подготовки текстур к использованию в Unity 3D.

2.3 Microsoft Visual Studio

Microsoft Visual Studio -- линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Silverlight. [6]

Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как, например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования) или инструментов для прочих аспектов процесса разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server). [6]

IDE корпорации Майкрософт использовался для написания и редактирования программного кода. Таким образом реализовывались механики, которые будут описаны позже.

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

2.3.1 Язык программирования C#

Наибольшие трудности в изучении языка программирования вызывает то обстоятельство, что ни один из его элементов не существует обособленно. Напротив, все элементы языка действуют совместно. Такая взаимосвязанность затрудняет рассмотрение одного аспекта C# безотносительно к другому. Поэтому для преодоления данного затруднения в этой главе дается краткий обзор нескольких средств языка C#, включая общую форму программы на C#, ряд основных управляющих и прочих операторов. Вместо того чтобы углубляться в детали, в этой главе основное внимание уделяется лишь самым общим принципам написания любой программы на C#. А большинство вопросов, затрагиваемых по ходу изложения материала этой главы, более подробно рассматриваются в остальных. [11]

Объектно-ориентированное программирование

Основным понятием C# является объектно-ориентированное программирование (ООП). Методика ООП неотделима от C#, и поэтому все программы на C# являются объектно-ориентированными хотя бы в самой малой степени. В связи с этим очень важно и полезно усвоить основополагающие принципы ООП, прежде чем приступать к написанию самой простой программы на C#. ООП представляет собой эффективный подход к программированию. Методики программирования претерпели существенные изменения с момента изобретения компьютера, постепенно приспосабливаясь, главным образом, к повышению сложности программ. Когда, например, появились первые ЭВМ, программирование заключалось в ручном переключении на разные двоичные машинные команды с переднего пульта управления ЭВМ. Такой подход был вполне оправданным, поскольку программы состояли всего из нескольких сотен команд. Дальнейшее усложнение программ привело к разработке языка ассемблера, который давал программистам возможность работать с более сложными программами, используя символическое представление отдельных машинных команд. Постоянное усложнение программ вызвало потребность в разработке и внедрении в практику программирования таких языков высокого уровня, как, например, FORTRAN и COBOL, которые предоставляли программистам больше средств для того, чтобы как-то справиться с постоянно растущей сложностью программ. Но как только возможности этих первых языков программирования были полностью исчерпаны, появились разработки языков структурного программирования, в том числе и C. [11]

На каждом этапе развития программирования появлялись методы и инструментальные средства для “обуздания” растущей сложности программ. И на каждом таком этапе новый подход вбирал в себя все самое лучшее из предыдущих, знаменуя собой прогресс в программировании. Это же можно сказать и об ООП. До ООП многие проекты достигали (а иногда и превышали) предел, за которым структурный подход к программированию оказывался уже неработоспособным. Поэтому для преодоления трудностей, связанных с усложнением программ, и возникла потребность в ООП.

ООП вобрало в себя все самые лучшие идеи структурного программирования, объединив их с рядом новых понятий. В итоге появился новый и лучший способ организации программ. В самом общем виде программа может быть организована одним из двух способов: вокруг кода (т.е. того, что фактически происходит) или же вокруг данных (т.е. того, что подвергается воздействию). Программы, созданные только методами структурного программирования, как правило, организованы вокруг кода. Такой подход можно рассматривать «как код, воздействующий на данные».

Совсем иначе работают объектно-ориентированные программы. Они организованы вокруг данных, исходя из главного принципа: «данные управляют доступом к коду». В объектно-ориентированном языке программирования определяются данные и код, которому разрешается воздействовать на эти данные. Следовательно, тип данных точно определяет операции, которые могут быть выполнены над данными. Для поддержки принципов ООП все объектно-ориентированные языки программирования, в том числе и C#, должны обладать тремя общими свойствами: инкапсуляцией, полиморфизмом и наследованием. Рассмотрим каждое из этих свойств в отдельности.

Инкапсуляция

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

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

Основной единицей инкапсуляции в C# является класс, который определяет форму объекта. Он описывает данные, а также код, который будет ими оперировать. В C# описание класса служит для построения объектов, которые являются экземплярами класса. Следовательно, класс, по существу, представляет собой ряд схематических описаний способа построения объекта.

Код и данные, составляющие вместе класс, называют членами. Данные, определяемые классом, называют полями, или переменными экземпляра. А код, оперирующий данными, содержится в функциях-членах, самым типичным представителем которых является метод. В C# метод служит в качестве аналога подпрограммы. (К числу других функций-членов относятся свойства, события и конструкторы.) Таким образом, методы класса содержат код, воздействующий на поля, определяемые этим классом.

Полиморфизм

Полиморфизм, что по-гречески означает “множество форм”, -- это свойство, позволяющее одному интерфейсу получать доступ к общему классу действий. Простым примером полиморфизма может служить руль автомашины, который выполняет одни и те же функции своеобразного интерфейса независимо от вида применяемого механизма управления автомашиной. Это означает, что руль действует одинаково независимо от вида рулевого управления: прямого действия, с усилением или реечной передачей. Следовательно, при вращении руля влево автомашина всегда поворачивает влево, какой бы вид управления в ней ни применялся. Главное преимущество единообразного интерфейса заключается в том, что, зная, как обращаться с рулем, вы сумеете водить автомашину любого типа. Тот же самый принцип может быть применен и в программировании. Рассмотрим для примера стек, т.е. область памяти, функционирующую по принципу «последним, пришел -- первым обслужен». Допустим, что в программе требуются три разных типа стеков: один -- для целых значений, другой -- для значений с плавающей точкой, третий -- для символьных значений. В данном примере алгоритм, реализующий все эти стеки, остается неизменным, несмотря на то, что в них сохраняются разнотипные данные. В языке, не являющемся объектно-ориентированным, для этой цели пришлось бы создать три разных набора стековых подпрограмм с разными именами. Но благодаря полиморфизму для реализации всех трех типов стеков в C# достаточно создать лишь один общий набор подпрограмм. Зная, как пользоваться одним стеком, вы сумеете воспользоваться и остальными. В более общем смысле понятие полиморфизма нередко выражается следующим образом: “один интерфейс -- множество методов”. Это означает, что для группы взаимосвязанных действий можно разработать общий интерфейс. Полиморфизм помогает упростить программу, позволяя использовать один и тот же интерфейс для описания общего класса действий. Выбрать конкретное действие (т.е. метод) в каждом отдельном случае -- это задача компилятора. Программисту не нужно делать это самому. Ему достаточно запомнить и правильно использовать общий интерфейс.

Наследование

Наследование представляет собой процесс, в ходе которого один объект приобретает свойства другого объекта. Это очень важный процесс, поскольку он обеспечивает принцип иерархической классификации. Если вдуматься, то большая часть знаний поддается систематизации благодаря иерархической классификации по нисходящей. Например, сорт яблок “Джонатан” входит в общую классификацию сортов яблок, которые, в свою очередь, относятся к классу фруктов, а те -- к еще более крупному классу пищевых продуктов. Это означает, что класс пищевых продуктов обладает рядом свойств (съедобности, питательности и т.д.), которые по логике вещей распространяются и на его подкласс фруктов. Помимо этих свойств, класс фруктов обладает своими собственными свойствами (сочностью, сладостью и т.д.), которыми он отличается от других пищевых продуктов. У класса яблок имеются свои характерные особенности (растут на деревьях, не в тропиках и т.д.). Таким образом, сорт яблок “Джонатан” наследует свойства всех предшествующих классов, обладая в то же время свойствами, присущими только этому сорту яблок, например, красной окраской кожицы с желтым бочком и характерным ароматом и вкусом. Если не пользоваться иерархиями, то для каждого объекта пришлось бы явно определять все его свойства. А если воспользоваться наследованием, то достаточно определить лишь те свойства, которые делают объект особенным в его классе. Он может также наследовать общие свойства своего родителя. Следовательно, благодаря механизму наследования один объект становится отдельным экземпляром более общего класса.

3 Проектирование приложения

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

3.1 Разработка структуры приложения

Есть довольно много файлов и папок, хорошие новости в том, что только две папки должны находиться под контролем: Assets и ProjectSettings. Другие папки генерируются на основе этих двух папок.

Вот краткий обзор всех файлов и папок.

Assembly-CSharp-vs.csproj и Assembly-CSharp.csproj - Visual Studio (с окончанием -- vs на конце файлов) и MonoDevelop файлы проекта, созданные для ваших C# скриптов.

Assembly-UnityScript-vs.unityproj и Assembly-UnityScript.unityproj - те же файлы проекта, но для скриптов JavaScript.

testproject.sln и TestProject-csharp.sln -- файлы проектов для интегрированных средств разработки (IDE), первая включает в себя проект с языками -- C #, JavaScript и Boo, в то время как второй файл -- только для проекта с языком C # и предназначен для открытия в Visual Studio, потому что VS «не знает» скрипты JavaScript и Boo проекта.

testproject.userprefs и TestProject-csharp.userprefs -- конфигурационные файлы, где MonoDevelop сохраняет текущие файлы, точки восстановления, время и т.д.

Все файлы перечисленные выше, за исключением всех файлов. userprefs , которые повторно создаются каждый раз при выборе Assets -> Sync MonoDevelop Project в меню редактора Unity (Синхронизация проекта).

После синхронизации проекта в MonoDevelop, тогда откроется testproject.sln со всеми файлами проекта, но если у вас нет кода JavaScript, то в проекте вы можете открыть TestProject-csharp.sln, который иметь в два раза меньше файлов проекта и никаких ошибок, связанных с JS.

Структура папок проекта в Unity:

Assets -- папка, в которой хранятся все игровые ресурсы, в том числе скрипты, текстуры, звуки и т.д. Определенно это самая важная папка в вашем проекте.

ProjectSettings -- в этой папке хранятся все настройки проекта Unity, такие как физика, теги, игровые настройки и т.д. Другими словами все настройки, которые вы сделали в меню Edit > Project Settings переходит в эту папку.

Library - локальный кэш для импортируемых Assets, при использовании внешней системы контроля версий (VCS) эта папка должна быть исключена из списка VCS.

OBJ и Temp -- папки для временных файлов, создаваемых во время сборки проекта, OBJ используется MonoDevelop, Temp используется Unity.

3.2 Сеттинг

Сеттинг - среда, в которой происходит действие художественного произведения, Сеттинг можно определить, как набор правил и внутренней истории некоего окружения. Так как данное слово является заимствованным, его значение варьируется в зависимости от автора. [7]

Словарь Мерриама-Вебстера определяет сеттинг как:

· время, место и обстоятельства, в которых развиваются события;

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

· картонный задник в театральной или кинопостановке.

Частным случаем понятия «сеттинг» является «вымышленная вселенная» (например, «Средиземье» Дж. Толкина). Вымышленный сеттинг может включать собственные космологию, географию, историю, культуру. Однако сеттинг может быть не только вымышленным, но и реальным, например: [7]

· «СССР периода Великой Отечественной войны»

· «Современный Ближний восток»

· «Средневековая Европа»

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

Мир населяют выдуманные расы: эльфы, дворфы, орки, энты, драконы и прочие существа. Люди в этом мире являются пришельцами и встречаются в малых количествах.

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

В этом мире ценится сила, или знания, которые приносят победу над врагами. Существуют придания о иных землях, в которых достойнейшие проходят испытание. Избранные, кто выжил и показал себя присоединяются к армии богов в великой битве миров. Разумеется, это краткий пересказ основного придания этого мира. Все расы знают его и чтут. Как и в любом другом обществе, есть и те, кто опровергают данную веру и считают бесконечную войну проблемой, которую нужно решить.

3.3 Планирование механик

Есть только два фактора, которые определяют любое текущее состояние игры: механика (правила) и игроки своими действиями. [8]

Поделим ход игры на такты:

Такт 1: определение состояния

Всегда есть некое текущее состояние системы (например, начало хода). Оно определяется на первом такте инициализирующей последовательностью, когда игроки «загружают» игру, раскладывая поле, выбирая фишки, распределяя начальные ресурсы и так далее. Затем оно меняется в зависимости от происходящего в игре. [8]

Такт 2: игроки оценивают состояние для принятия решений

После обновления состояния игры есть такт, во время которого игроки принимают решения на основе новой информации. [8]

Такт 3: игроки выполняют действия

На этом шаге игроки меняют состояние игры, делая что-то в соответствии с правилами, например, двигая фигуру. [8]

Такт 4: сама игра даёт обратную связь

В шахматах этого нет, но, например, если бы мы играли в кости, игра сгенерировала бы нам несколько случайных чисел на кубиках для нового состояния. Выход из цикла делается по соответствии одному из критериев окончания алгоритма, то есть, например, вашей победе. [8]

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

Итак, после планировки механик, которые будут разрабатываться на этапе реализации, получился следующий список:

1. Система взаимодействий с окружаемым миром:

a. Передвижение персонажа;

b. Чтение надписей;

c. Открытие/закрытие дверей;

d. Поднятие предметов с земли;

e. Осмотр объектов;

f. Целевое взаимодействие с объектами.

2. Ролевая система. Характеристики персонажа:

a. Здоровье, выносливость, энергия (мана);

b. Основные характеристики: сила, ловкость, выносливость, интеллект;

c. Система накопления опыта. Повышения уровня. Повышение характеристик персонажа;

d. Система инвентаря.

3. Боевая система

a. Ближний бой холодным оружием;

b. Дальний бой;

c. Бой с использованием магии;

d. Использование особых устройств для ведения боя.

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

3.4 Планирование локаций

Стоит определиться, какие места необходимо создать:

· Великий лес - древнее пристанище энтов, сердцем леса является Великое Древо, что является матерью всех энтов леса. Лес также населяют эльфы, их объединяет священный союз с древесными созданиями. Лес расположен по большей части в центре континента и простирается с севера на юг, почти полностью. Горы на западе отделяют лес от «Пустынь Варанов», а на востоке лес плавно переходит в выжженные земли близ старого вулкана.

· Горный массив - горный хребет, отделяет «Великий лес» от «Пустынь Варанов». Массив расположился с севера на юг через весь континент, некоторые скалы уходят в море. В северо-западной части континента, массив переходит в гористую местность, где обитают многочисленные кланы орков. Суровые земли, где есть место лишь силе. Местные давно привыкли там жить, но все, кому приходится пройти через эти горы, вынуждены выживать, так как местность там чрезвычайно суровая.

· Пустыни Варанов - как и любая пустыня, она бесплодна и кажется бескрайней. Мало источников воды и мало пищи, именно поэтому местное население, «Вараны», проживают в полуподземных селениях, выполненных в каменном стиле. После того, как их империя пришла в упадок, по пустыне остались разбросаны забытые селения и храмы Варанов. Тем не менее, эти ящеры до сих пор являются уважаемой силой на всем континенте.

· Выжженные земли - рядом со старым вулканом, простираются пустоши. Действующий вулкан периодически активируется и выжигает все вокруг, здесь издавна обитают элементали стихии огня. Пламя вулкана и пыль, сдерживается в этих землях древними храмами стихий. Опасная местность и обычные люди, не искушенные магией или прочими исследованиями, не имеют привычки посещать эту местность. К тому же, посещать это место без личной защиты может стоить жизни.

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

· Бесконечное море - море которое заканчивается нигде, в нем располагается пара островов, а на дне полно старых строений из старых эпох. Море не совсем бесконечное, просто на краях нет земли, просто вода вздымается к небесам. Именно поэтому, все считают, что мир в котором они живут, плоский.

· Пылающий айсберг - феномен, огонь и лед в одном месте, тем не менее лед здесь не тает, а огонь не гаснет. Посреди бесконечного моря, этот айсберг издавна считается домом стихий и там обитают сердца элементалей.

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

В главу реализации вошло много теории, но без нее никуда. Далее будут отображены работы, связанные с дизайном уровней. Собственно, реализация описанных выше локаций.

4 Реализация

4.1 Дизайн уровней

В редакторе Unity 3D достаточно удобный интерфейс и способы создания локаций. Основная сложность, это найти красивые и подходящие текстуры для всех моделей и террейна.

Террейн - это объект, являющий собой огромное полотно, высоту каждой точки которого, можно настроить с помощью специального редактора. С помощью того же редактора наносятся текстуры и высаживается растительность.

Рис.4.1 - Способ создания террейна

Красивые горы, речки и леса создаются с помощью этого объекта, он автоматически оптимизирует отображение объектов относительно игрока, тем самым, не загружая в память далекие объекты, а ближайшие модели рисует с наивысшим качеством. На рисунке 4.1 проиллюстрирован способ создания террейна и сам объект на сцене, пока что гладкий, не тронутый.

Рис.4.2 - Инструменты изменения ландшафта

Для создания ландшафта существует панель в правой части редактора Unity 3D. На ней размещены кисти для различных операций повышения/уменьшения высоты, выравнивания по высоте, нанесения текстур и размещения растительности (Рисунок 4.2).

Таким образом, поработав с высотами и добавив текстуры с растительностью, получим первую итерацию будущей локации.

Рис.4.3 - Локация «Великий лес». Итерация первая

Сейчас местность выглядит голой и текстуры, нанесенные на нее однообразны, деревья что заполоняют лес одинаковые и не являются чем-то красивым. Это всего лишь первая итерация на пути к красивой экспозиции. Исходя из этого стоит выделить следующие, более маленькие задачи, решая которые детализация и атмосфера леса будет усилятся.

Итак, для улучшения внешнего вида этого леса необходимо сделать следующее:

· Создать несколько видов деревьев и расположить их на местности;

· Найти/создать более разнообразные текстуры скал, земли, травы;

· Создать кустарники и траву;

· Добавить водную гладь в море, реку и озеро;

· Наполнить местность деталями.

В Unity 3D встроен редактор деревьев и кустарников. Сперва создадим новые деревья для великого леса!

Рис.4.4 - Создание дерева

Чтобы открыть редактор деревьев необходимо создать дерево (Рисунок 4.4). таким образом, на сцене появится ствол дерева и в дальнейшем к нему, с помощью редактора, можно будет добавить ветки и листья.

Рис.4.5 - Создание ветвей

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

· Group seed - семя для генерации группы, число которое определяет расположение ветвей или листьев;

· Frequency - количество ветвей в группе;

· Distribution - способ расположения ветвей в группе. Есть следующие варианты:

o Random - хаотичное размещение ветвей;

o Alternate - ветви располагаются зеркально по всей длине предыдущей группы в одной плоскости;

o Opposite - ветви располагаются зеркально по всей длине предыдущей группы в двух плоскостях

o Whorled - ветви размещены по окружности, как у елки;

· Twirl - угол разворота ветвей в горизонтальной плоскости, используется для следующих типов распределения: alternate, opposite, whorled;

· Whorled Step - количество ветвей в подгруппе, используется только для типа распределения whorled;

· Growth Scale - распределение отвечающее за рост ветвей, длину ветви в зависимости от ее позиции на ветви предыдущей группы. Применяется для всех типов;

· Growth Angle - угол поворота ветвей по вертикальной оси. Применяется для всех типов распределения;

· Branch Material - текстура коры;

· Break Material - текстура сруба для сломанной ветки;

· Frond Material - текстура листьев на ветви;

· Length - длина ветви, указывается, как интервал от меньшей длины ветви до самой большой;

· Relative Length - опция зависимости длины ветви от места где она растет;

· Radius - радиус ветви;

· Crinkliness - скрученность ветви;

· Seek Sun - степень изгиба ветвей к свету звезды;

· Break Chance - шанс, что сгенерированная ветвь будет сломанной;

· Break Location - интервал на котором ветвь может быть сломана;

Рис.4.6 - Пример созданых деревьев

С помощью всех вышеперечисленных параметров были созданы несколько простых деревьев (Рисунок 4.6). В дальнейшем планируется улучшить созданные деревья, и создать более разнообразные варианты.

Рис.4.7 - Обновление леса

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

Рис.4.8 - Использованные текстуры коры, листьев и сруба

Рис.4.9 - Используемые текстуры земли, травы, скал и камней

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

Рассмотрим панель редактирования текстур террейна:

Рис.4.10 - Иллюстрация добавления новой текстуры

· Brushes - набор кистей для нанесения текстур;

· Textures - здесь отображаются все добавленные текстуры, выбранной текстурой можно рисовать на террейне;

· Кнопка «Edit Textures» дает доступ к выпадающему списку из трех опций: «Add Texture», «Edit Texture», «Remove Texture»; Добавление, изменение и удаление текстуры, соответственно;

· Settings - настройки кисти;

o Brush Size - размер кисти;

o Opacity - прозрачность текстуры;

o Target Strenght - опция очень похожа на прозрачность текстуры, но в отличие от предыдущей опции она жестко задает точке на поверхности необходимую текстуру и ее прозрачность;

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

4.2 Описание функционала приложения

Любая игра - это взаимодействие и чем больше его будет в ней, тем больше интереса задерживаться в этой игре. За время разработки дипломного проекта было сделано не много, в основном упор делался на проектирование и изучение методов и средств, которыми запланированное можно реализовать. Тем не менее стоит описать тот минимальный функционал, что приложение может предоставить.

· Управление направлением обзора камеры;

· Передвижение камеры вдоль поверхности ландшафта с применением простейшей физики;

· Имитация прыжков;

С программной стороны все, как было сказано выше упор делался на проектирование и дизайн. Программирование в этой дипломной работе занимает малую долю, но тем не менее пример программного кода, реализующего описаный выше функционал, представлен в приложении А.

Расскажу подробнее о передвижении персонажа. Игрок управляет камерой с помощью мыши и клавиатуры используя следующие горячие клавиши:


Подобные документы

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

    дипломная работа [2,5 M], добавлен 11.02.2017

  • Игровые технологии; назначение, классификация и цель создания мобильных игр. Развлекательные, коммуникативные, терапевтические, диагностические функции игровой деятельности. Создание мобильного программного приложения "Angry Crane" в среде Java Android.

    курсовая работа [1,5 M], добавлен 09.12.2014

  • Обзор средств создания обучающих программ и формирование требований к электронному учебнику. Исследование этапов разработки интерактивного обучающего ресурса. Выбор инструментов реализации. Создание интерфейсной части приложения, проектирование тестов.

    дипломная работа [3,2 M], добавлен 20.05.2013

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

    курсовая работа [74,0 K], добавлен 30.08.2014

  • Платформа Unity 3D как средство разработки компьютерных деловых игр. Рассмотрение реализации взаимодействия между подсистемой проведения деловых игр и модулем визуализации. Формирование игровых уровней на примере компьютерной игры "Проезд перекрестка".

    дипломная работа [2,8 M], добавлен 22.08.2017

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

    дипломная работа [858,0 K], добавлен 16.07.2013

  • Создание электронного учебника, написанного на языке гипертекстовой разметки HTML. Характеристика программного обеспечения ЭВМ, необходимого для создания и эксплуатации информационной системы. Алгоритм функционирования системы, отладка программы.

    курсовая работа [1,0 M], добавлен 22.12.2012

  • Исследование основных требований к пользовательскому интерфейсу. Краткая характеристика используемой операционной системы Windows 7 и языка программирования. Особенность создания удобного управления в игре. Главные требования к аппаратному обеспечению.

    курсовая работа [453,0 K], добавлен 02.06.2017

  • Разработка игрового проекта на игровом движке Unity 3D в среде программирования MS Visual Studio 2017. Блок-схема алгоритма работы приема сообщений с сервера на клиенте с упрощенным описанием выполняемых команд. Реализация пользовательского интерфейса.

    курсовая работа [1,5 M], добавлен 10.07.2017

  • Разработка адресных и технических требований к игре. Написание сценария. Общая концепция разработки приложения. Разработка схем алгоритмов приложения. Игровые технологии. Выбор среды и программированного языка. Описание пользовательского интерфейса.

    курсовая работа [1,6 M], добавлен 14.06.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.