Среда Unity как инструмент разработки




- это мульти-платформенный инструмент для разработки двух- и трёхмерных приложений и игр, работающий под операционными системами Windows и OS X. Созданные с помощью Unity приложения работают под операционными системами Windows, OS X, Android, Apple iOS, Linux, а также на игровых приставках Wii, PlayStation 3 и Xbox 360. Есть возможность создавать интернет-приложения с помощью специального подключаемого модуля к браузеру Unity, а также с помощью экспериментальной реализации в рамках модуля Adobe Flash Player. Позже от поддержки Flash отказались. Приложения, созданные с помощью Unity, поддерживают DirectX и OpenGL. [12]характеризуется следующими возможностями:

· Сценарии на C#, JavaScript (модификация) и Boo;

· Игровой движок полностью увязан со средой разработки. Это позволяет прямо в редакторе испытывать игру;

· Работа с ресурсами возможна через простой Drag&Drop.

· Интерфейс редактора настраиваемый;

· Осуществлена система наследования объектов;

· Поддержка импорта из очень большого количества форматов;

· Встроенная поддержка сети;

· Есть решение для совместной разработки - Asset Server;

· Также можно использовать подходящий пользователю способ контроля версий. К примеру, Tortoise SVN или Source Gear;

К особенностям данной среды разработки можно отнести

· широкие возможности импорта

· полностью настраиваемый и доступный большинству людей интерфейс

· кроссплатформенность

· гибкость и расширяемость

· гибкая ценовая политика

· доступно для VITV и epichnoetv

· поддержка физики ткани (PhysX Cloth)

· Assets Store, так называемый магазин компонентов

· наличие бесплатной версии с некоторыми ограничениями

· скиннинг на CPU

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

Влияние компонента на поведение или положение того или иного объекта в сцене (свойства компонента) определяется с помощью переменных компонента.

Ресурсы (Assets) проекта - это строительные/составные блоки всех проектов Unity, в качестве которых могут быть использованы файлы изображений (текстур), 3D-моделей, звуковые файлы, которые будут использоваться при создании в качестве ресурсов. Поэтому в любой папке проекта Unity всегда существует подкаталог с именем Assets, где хранятся все файлы ресурсов.

Когда какой-либо ресурс (например, геометрическая 3D-модель) используется в сцене игры, он становится в терминологии Unity игровым объектом (Game Object). Все эти объекты изначально имеют хотя бы один компонент, задающий его положение в сцене и возможные преобразования (компонент Transform). Переменные компонента Transform определяет положение (position), поворот (rotation) и масштаб (scale) объекта в его локальной декартовой прямоугольной системе координат X, Y, Z. Наличие переменных у каждого компонента обусловливает возможность обращения к ним из соответствующей программы (скрипта).

Компоненты (components) в Unity3d имеют различное назначение: они могут влиять на поведение, внешний вид и многие другие функции объектов, к которым прикрепляются (attaching). Unity предоставляет множество компонентов различного назначения.

Для обеспечения интерактивности различных 3D-приложений в Unity3d используются скрипты, которые также рассматриваются средой как компоненты. Помимо JavaScript, Unity3d также предоставляет возможность использовать для написания скриптов языки C# и Boo (производный от языка Python). Для написания скриптов можно воспользоваться встроенным редактором Unity3d MonoDevelop.

В качестве языка для написания скриптов в Unity применяются C#, JavaScript и Boo. Наиболее приоритетными языками для нас были C# и JavaScript.

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

· обозначения начала/конца блока кода фигурными скобками;

· обозначения, ассоциативность и приоритет большинства встроенных операций (присвоение, арифметические, логические, побитовые операции, операции инкремента/декремента);

· синтаксис описания и использования переменных и функций (порядок «тип имя», использование модификаторов, обязательность скобок для функций, описание формальных параметров);

· синтаксис всех основных конструкций: условного оператора, циклов, оператора множественного выбора;

· отсутствие процедур (их заменяют функции типа void);

· наименования встроенных элементарных типов (кроме bool, в JavaScript этот тип называется boolean);

· использование точки с запятой

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

Оба языка позволяют определить класс внутри класса. Внутренние классы JavaScipt имеют доступ к нестатическим членам родительского класса; кроме того, внутри методов можно определять локальные классы, имеющие доступ по чтению к локальным переменным, и безымянные (анонимные) локальные классы, которые фактически позволяют создавать экземпляры объектов и интерфейсов, перекрывающие методы своего класса, непосредственно в месте их использования. На этом механизме в JS-программах может строиться обработка событий (событие генерирует вызов метода, в исходном классе-обработчике являющегося абстрактным; там, где нужен конкретный обработчик события, программист создаёт экземпляр локального анонимного класса - наследника базового класса-обработчика и непосредственно использует его). Таким образом, исчезает необходимость в специальном типе и синтаксической поддержке для событий, но сам код, создающий обработчики, несколько более сложен для понимания.

Подход C# более напоминает C++. Внутренние классы в C# имеют доступ только к статическим членам внешнего класса, а для доступа к нестатическим членам нужно явно указывать экземпляр внешнего класса. Локальные внутренние классы в C# не поддерживаются, обработка событий в нём не требует таких классов, поскольку строится на других механизмах.старше, чем C# и построен на большой и активной пользовательской базе. JavaScript доминирует в курсах программирования американских университетов и колледжей, и литературы по JavaScript сегодня намного больше, чем по C#.#, в свою очередь, развивается быстрее, гораздо слабее ограничивая себя в добавлении новых проблемно-ориентированных возможностей. Особенно эта тенденция проявилась в версии C# 3.0, в которой, например, появились SQL-подобные запросы. Новые возможности при этом строятся так, чтобы язык оставался языком общего назначения.# - язык относительно новый. Microsoft изучила существующие языки, такие как Java, Delphi и Visual Basic, и изменила некоторые аспекты языка для лучшего соответствия нуждам некоторых типов приложений.

Это определило наше решение в выборе языка. C#, определенно, гораздо более приспособлен для работы в проектах нашего типа, благодаря своей гибкости, стремительному развитию и общей адаптированности.

Далее приведен один и тот же фрагмент скрипта, на языках C# и JavaScript.

// C#UnityEngine;System.Collections;class ExampleSyntax: MonoBehaviour

{myInt = 5;

int MyFunction (int number)

{ret = myInt * number;

//JS

#pragma strictmyInt: int = 5;MyFunction (number: int): int

{

var ret = myInt * number;

return ret;


2.2 ПрограммированиескриптоввсредеUnity

 

Большое значение при организации взаимодействия 3d-объектов в пространстве имеет обнаружение столкновений (Сollision detection).

Сollision detection - это способ, с помощью которого анализируется 3D-пространство сцены на предмет столкновений между объектами. Присваивая объекту компонент Collider, мы фактически размещаем вокруг него невидимую сетку - так называемый коллайдер, который имитирует форму объекта и информирует о наличии столкновения с другим объектом. Например, в игре-симуляторе боулинга шары будут иметь простую сферическую форму коллайдера (Sphere collider), в то время как у объектов-кеглей коллайдер будет иметь форму цилиндра/капсулы или, для большей реалистичности столкновений, будет использовать меш (mesh), который является не чем иным, как описанием геометрии 3d-модели. Информация о столкновении коллайдеров поступает в физический движок, который сообщает столкнувшимся объектам их дальнейшую реакцию на это столкновение, основанную на направлении и силе удара, скорости и других факторах. Отметим, что использование коллайдеров, повторяющих форму меша модели, с одной стороны, дает более точное определение столкновений, но в то же время приводит к увеличению затрат на их вычисление.

Рассмотрим особенности столкновений объектов как с использованием непосредственного функционала Сollision detection, предоставляемого Unity3d, так и с помощью программирования такого взаимодействия на языке C#.

Для этого добавим в созданную ранее сцену новый кубический объект, выполняющий роль некоторого препятствия для падающего куба, смоделированного ранее (GameObject > Create Other > Cube), и придадим ему форму параллелепипеда.

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

Чтобы лучше увидеть картину взаимодействия куба и прямоугольного препятствия, необходимо развернуть исходное положение падающего куба - на ребро. Вращение выбранного объекта (куба) осуществляется в Unity3d c помощью инструмента «Rotate». При активации этого инструмента вокруг объекта появляется своеобразная сфера, определяющая углы его вращения в трехмерном пространстве. Захватывая и перемещая одну из ее сторон, можно вращать объект произвольным образом.

 

 

Далее переключившись в режим просмотра Game, можно наблюдать сцену взаимодействующих в ней объектов. Для определения факта столкновения объектов в Unity3d необходимо отличать эти объекты по их названию. Переименовать объект «Plane» (Плоскость) в объект «Ground», а параллелепипед, представляющий стену (препятствие), в объект «Wall», можно непосредственно выбрав объект в окне иерархии и применив к нему команду «Rename» из контекстного меню, после чего задать новое имя объекта. Отметим, что при разработке проектов в Unity3d разрешается ввод русскоязычных символов, однако при работе со скриптами необходимо использовать латиницу.

Для того чтобы заставить взаимодействовать между собой имеющиеся в сцене трехмерные модели, создадим скрипт на языке программирования C# и назовем его «Dialog» (Project > Create > C# Script).

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

Рассмотрим следующий код:UnityEngine; System.Collections; class Dialog: MonoBehaviour {

// Метод-функция, вызываемая при столкновении объектовOnCollisionEnter() {.Log("Hit Something");// Передаем сообщение в консоль Unity

}}

Первые две строки подключают к скрипту используемые пространства имен. Далее необходимо запомнить, что главным классом в Unity3d является MonoBehaviour. Любой пользовательский скрипт (в описанном случае это Dialog) должен быть его наследником, и неспроста - ведь именно этот класс реализует интеграцию всех объектов в основной цикл программы. Именно это наследование позволяет пользовательскому скрипту (классу) исполнять роль компонента и быть привязанным к игровому объекту.

Здесь метод «OnCollisionEnter» определяет столкновение объекта с другими объектами. А статический метод «Log» класса «Debug» пишет сообщение "Hit Something" в консоль Unity.

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

Теперь, перейдя в режим Play, можно наблюдать, что в тот момент, когда созданный объект куб коснется плоской поверхности, в консоли среды Unity3d (Window > Console) появляется соответствующее сообщение.

Заметьте, что такое сообщение будет выдаваться при каждом столкновении объектов. Причем последнее консольное сообщение отображается в статус (внизу окна).

Для выяснения того, с какими именно объектами столкнулся исходный объект, необходимо использовать значение параметра класса «Collision», которое будет принимать метод «OnCollisionEnter».

Открываем редактор скрипта и вставляем в него следующий код:

// Теперь метод принимает объект класса Collision, с которым происходит столкновение

void OnCollisionEnter(Collision myCollision) {

// определение столкновения с двумя разноименными объектами

if (myCollision.gameObject.name == "Ground") {

// Обращаемся к имени объекта, с которым столкнулись

Debug.Log("Stolknulsya s Zemlei");

} if (myCollision.gameObject.name == "Wall") {.Log("Stolknulsya sо Stenoi ");

}}

После открытия консоли (Window > Console) мы увидим, с какими именно объектами в сцене столкнулся куб. Таким образом, Unity3d позволяет нам оценить возможности взаимодействия объектов внутри среды.

Необходимо добавить префаб в проект (Project > Create > Prefab). В результате на панели Project в окне проекта появится префаб с именем «New Prefab». Переименуем его в «UprugostCube».

Префаб (Prefabs) - это конструкция подготовленных объектов и компонентов, предназначенная для их многократного использования в проекте. Экземпляр префаба может быть добавлен в любое количество сцен, а также многократно в одну сцену. Все экземпляры являются ссылками на оригинальный префаб и, фактически, его «клонами»; имеют те же свойства и компоненты, что и оригинальный объект.

Свойства созданного префаба «UprugostCube» описываются на панели инспектора, а его предварительный вид доступен в окне «Preview».

Для создания пары экземпляров префаба на плоскости необходимо просто его перетащить. В результате на плоскости появятся два куба, а в окне «иерархии» добавится объект с именем соответствующего префаба «UprugostCube».

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

Рассмотрим, каким образом можно удалять объекты в Unity3d в скриптах на языке C#. Для этого в окне «Project» создадим новый скрипт с именем «Destroy» и откроем его в редакторе скриптов MonoDevelop.

Как уже говорилось, при создании C# скрипта Unity создает некий каркас, состоящий из подключенных библиотек и основного класса (используемого скриптом) с методами Start() и Update().

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

В данном случае мы воспользуемся методом Start(), который выполняется единожды для каждого компонента сразу после нажатия на кнопку «Play» и, соответственно, должен использоваться для инициализации переменных и придания им каких-либо начальных значений. Добавим в тело метода Start() функцию Destroy() и передадим в нее gameObject, указав таким образом, что скрипт должен уничтожить объект, компонентом которого он является:

// метод Start() выполняется единожды, сразу после окончания загрузки сцены() {

// уничтожить объект, к которому прикреплен данный скрипт(gameObject);

}

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

Теперь попробуем уничтожить другой объект с помощью его поиска в среде. Для этого воспользуемся статическим методом Find() основного класса GameObject:

// ищем объект с именем Stena и если таковой есть - уничтожаем его

Destroy(GameObject.Find(“Wall”));

В случае необходимости уничтожения объекта не сразу, а спустя какое-то время, можно задать значение во второй параметр функции Destroy:

// Теперь уничтожаем стену, спустя две секунды после загрузки сцены(GameObject.Find(“Wall”), 2);

Далее рассмотрим скрипты, описывающие управление персонажем в трехмерной рабочей среде факультета. Наша среда представляет собой трехмерную модель учебного корпуса №2 ВГСПУ, который полностью занят помещениями факультета МИФ. Первое, что обеспечивает интерактивность, - это возможность обзора 3D пространства с помощью мыши.

Подключаем мышь с помощью данного отрезка скрипта. Переменные sensitivityX и sensitivityY отвечают за чувствительность мыши по вертикальной и горизонтальной осям. Переменные minimumX, maximumX, minimumY, maximumY указывают на какой угол может отклониться камера от начального положения. По оси Х эти значения равны -360 и 360, что означает, что игрок может свободно вращать камеру по оси Х. В вертикальной оси, эти значения равны -60 и 60. То есть, пользователь может отклонить камеру на 60 градусов вверх либо вниз. Для стандартных игр от первого лица эти значения равны -90 и 90.

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

public class MouseLook: MonoBehaviour {enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2}RotationAxes axes = RotationAxes.MouseXAndY;float sensitivityX = 15F;float sensitivityY = 15F;float minimumX = -360F;float maximumX = 360F;float minimumY = -60F;float maximumY = 60F;rotationY = 0F;Update ()

{(axes == RotationAxes.MouseXAndY)

{rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;+= Input.GetAxis("Mouse Y") * sensitivityY;= Mathf.Clamp (rotationY, minimumY, maximumY);.localEulerAngles = new Vector3(-rotationY, rotationX, 0);

}if (axes == RotationAxes.MouseX)

{.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);

}

{+= Input.GetAxis("Mouse Y") * sensitivityY;

Теперь, рассмотрим скрипт перемещения в другую локацию по клику мышью на двери.

 

 

using UnityEngine;System.Collections;class doorClick: Photon.MonoBehaviour

{string auditory;void Update ()

{

}OnMouseDown ()

{.players = GameObject.FindGameObjectsWithTag("Player");(GameObject Obj in GameObject.FindGameObjectsWithTag("Player"))

{

Мы перетаскиваем его на объект Door, тем самым, применяя его к данному объекту.

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

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

виртуальный образовательный пользователь трехмерный


Заключение

 

В ходе нашего исследования все поставленные задачи были решены.

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

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

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

В ходе выполнения курсовой нашей командой была разработана виртуальная рабочая среда факультета МИФ ВГСПУ. Мы изучили дидактические возможности трехмерной виртуальной рабочей среды и заключили, что видео-лекции являются, на наш взгляд, самой приемлемой формой лекций в нашей среде. Также наш проект не страдает нехваткой практики, и учащиеся всегда могут выполнить различные эксперименты и опыты. Для учащихся всегда в наличии электронная библиотека, которая в состоянии заменить обычную традиционную библиотеку.

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

 


Литература

 

1. Вайндорф-Сысоева М. Е., Хапаева С. С., Шитова В. А. Алгоритм деятельности при сетевом взаимодействии для решения образовательных задач в виртуальной образовательной среде МГОУ. - М., 2008.

2. Герасимов В. Unity 3.x Scripting. - Packt Publishing, 2011.

3. Калмыков Д. А., Хачатуров Л. А. Опыт реализации виртуальных образовательных сред. Школьные технологии №2, 2002.

4. Карташева О.В. Использование адаптивной системы тестирования АСТ-тест для контроля знаний при дистанционном изучении темы «Базы данных» // Материалы международной конференции-выставки «Информационные технологии в образовании». - Москва, 2001.

5. Князев А. С. Организация виртуального рабочего пространства факультета вуза на базе инструментария Unity3D // Материалы Всероссийской научно-практической конференции «Прикладная информатика и компьютерное моделирование» г. Уфа. Том 3. Уфа: БГПУ им. М. Акмуллы, 2012. С. 15-17.

6. Репкин Д. Виртуальная реальность или киберпространство. 2002

7. Седова Д. В. Организация учебного процесса в виртуальной образовательной среде с применением социальных сетей. - Дубна, 2008.

8. Степчева З.В. Основы геометрического моделирования в Unity 3D. Учебное электронное издание. УлГТУ - Ульяновск, 2012.

9. Этко И.Г. Компьютерные тесты по информатике и информационным технологиям в сети Интернет. Журнал «Педагогическая информатика», № 1, 2005, с. 77-83.

10.Goldstone, W. Unity Game Development Essentials. - Packt Publishing, 2009. -316 с.

11.Creighton, R.-H. Unity 3D Game Development by Example Beginner's Guide. - Packt Publishing, 2010. - 384 c.

12.Sue Blackman. Beginning 3D Game Development with Unity: All-in-one, Multi-platform Game Development. - Apress, 2011. - 992 с.

Виртуальная образовательная лаборатория <https://www.virtulab.net/>.

Информационные технологии в образовании. Сайт учителей: <https://www.rusedu.info/>

«Молодой ученый». Ежемесячный научный журнал: <https://www.moluch.ru/>



Поделиться:




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

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


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