Задание к лабораторной работе №1




Основы геометрического моделирования в Unity3d

Методические указания
к выполнению лабораторных работ для бакалавров, специалистов и магистров по направлениям
200100 - Приборостроение,

230400 - Информационные системы и технологии

 

 

Составители З.В. Степчева,

О.С. Ходос

 

Ульяновск


УДК 004.925.8

ББК 32.973.26-018.2я7

С 79

 

Рецензент

Доцент кафедры ВТ УлГТУ, к.т.н. Святов К.В.

 

 

Одобрено секцией методических пособий

научно-методического совета университета

 

 

Степчева, З. В.

С 79 Основы геометрического моделирования в Unity3d / З. В.Степчева, О.С. Ходос. – Ульяновск: УлГТУ, 2012. – 32 с.

 

 

Методические указания написаны в соответствии с рабочими программами курсов «Компьютерная графика», «Машинная графика», «Компьютерная геометрия и графика» для бакалавров по направлениям 200100 – Приборостроение, 230400 – Информационные системы и технологии, а также специалистов по направлению 23020165 «Информационные системы и технологии».

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

Методические указания подготовлены на кафедре «Измерительно-вычислительные комплексы».

 

 

УДК 004.925.8

ББК 32.973.26-018.2я7

© Степчева З.В., О.С. Ходос, составление, 2012.

© Оформление. УлГТУ, 2012.


Оглавление

Введение.............................................................................................................. 5

1. Введение в Unity3d........................................................................................ 6

1.1. Общие сведения о Unity3d........................................................................ 6

1.2. Концепция Game Engine в Unity3d........................................................... 7

1.3. Терминология Unity3d............................................................................. 9

2. Интерфейс Unity3d. Создание простейших моделей твердых тел. Добавление массы, гравитации к твердому телу............................................................ 11

3. Основы взаимодействия (столкновения) между объектами. Применение скриптов на языке C#..................................................................................................... 20

4. Префабы. Копирование и удаление объектов среды в Unity3D. Создание префабов с применением скриптов C#.......................................................................... 27

Рекомендуемая литература............................................................................ 32


Введение

 

Важное место в программе подготовки бакалавров по направлениям 200100 «Приборостроение», 230400 «Информационные системы и технологии» и выпускников по специальности 23020165 «Информационные системы и технологии» занимают проблемы современных аппаратно-программных средств визуализации интерактивной трехмерной графики в дисциплинах «Компьютерная графика», «Компьютерная геометрия и графика», «Машинная графика», содержание которых определяется современными государственными образовательными стандартами.

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

В указаниях описаны визуальные инструменты для разработки и визуализации интерактивных 3D-проектов в Unity3d в режиме реального времени, в том числе с использованием скриптов на языке C#, а также описаны пути решения задачи экспорта и импорта данных.

Приводятся конкретные примеры типичных ситуаций в Unity3d с использованием программирования на языке C# с подробным их разбором.

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

1. Введение в Unity3d

1.1. Общие сведения о Unity3d

 

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

Проект Unity3d основан в 2005 году в Дании компанией Unity Technologies, имеет штаб-квартиру в San Francisco и рабочие группы в Копенгагене, Лондоне, Стокгольме, Вильнюсе, Сеуле, Токио.

Все версии проекта Unity3d содержат интегрированный редактор проектов, поддерживают импорт графических и неграфических ресурсов (моделей, в том числе анимированных, текстур, скриптов и т.д.), содержат встроенные ландшафты, шейдерную систему, сочетающую простоту использования, гибкость и производительность. Программирование графики в Unity3d осуществляется средствами JavaScript, Boo (диалект Phyton) и C# на основе.NET; реализована работа с сетью, используется физический движок Ageia PhysX, смешивание 3D-графики реального времени с потоковым аудио и видео. Сервер ресурсов Unity обеспечивает контроль версий в Unity.

Unity3d поддерживает широкий диапазон платформ: Windows (XP / Vista / W7), MacOs X, iPhone, iPod, iPad, Xperia PLAY, PS3, Flash 3D player. В 2012 дошла до финальной стадии версия Unity 4.0, в которой список поддерживаемых платформ расширился до iOS, Android, Wii, XBox 360, PlayStation 3, Linux. Поддерживаемые браузеры: IE, FireFox, Chrome, Opera, Safari.

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

Инструментарий Unity3d построен на использовании для разработки интерактивных приложений с двух- и трехмерной графикой, обрабатываемой в реальном времени, концепции игрового движка (Game Engine).

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

 

1.2. Концепция Game Engine в Unity3d

 

Игровой движок (Game Engine) ˗ это центральный программный компонент интерактивных приложений с трехмерной графикой, обрабатываемой в реальном времени, в том числе компьютерных и видеоигр. Он обеспечивает основные технологии моделирования и 3D-визуализации, упрощает процесс разработки проектов, обеспечивает возможность их запуска на нескольких платформах, таких как игровые консоли и настольные операционные системы, например, GNU/Linux, Mac OS X и Microsoft Windows.

Игровой движок обеспечивает основную функциональность пакета Unity3d. Он включает в себя многократно используемые программные компоненты: графический движок («визуализатор»), физический движок, звуковой движок, систему скриптов, анимацию, искусственный интеллект, сетевой код, управление памятью и многопоточность.

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

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

Часто игровые движки имеют компонентную архитектуру, позволяющую заменять или расширять некоторые подсистемы движка более специализированными (и часто более дорогими) компонентами, например, для симуляции физической природы взаимодействия (Havok), звука (FMOD) или рендеринга (SpeedTree). Однако некоторые игровые движки, такие как RenderWare, проектируются как набор слабосвязанных компонентов, которые могут выборочно комбинироваться для создания собственного движка, вместо более традиционного подхода, который заключается в расширении или настройке гибкого интегрируемого решения. Тем не менее, расширяемость достигнута и остаётся высокоприоритетной в игровых движках из-за широких возможностей их применения.

Рассмотрим основные компоненты любого игрового движка (Game Engine) ˗ графический и физический движки.

Графический 3D-движок (англ. 3D-graphics engine; система рендеринга или «визуализатор ») ˗ промежуточное программное обеспечение (ППО) (англ. middleware), программный движок, основной задачей которого является визуализация (рендеринг) двухмерной или трёхмерной компьютерной графики. Может существовать как отдельный продукт или в составе игрового движка и использоваться для визуализации отдельных изображений или компьютерного видео. Графические движки, использующееся в программах по работе с компьютерной графикой (таких, как 3ds Max, Maya, Cinema 4D, Zbrush, Blender), обычно называются «рендерерами», «отрисовщиками» или «визуализаторами». При этом основное и важнейшее отличие «игровых» графических движков от «неигровых» состоит в том, что первые должны обязательно работать в режиме реального времени, тогда как вторые могут тратить по несколько десятков часов на вывод одного изображения. Вторым существенным отличием является то, что, начиная приблизительно с 1995-1997 года, графические движки производят визуализацию с помощью графических процессоров (GPU) видеокарт. Программные графические движки используют только центральные процессоры (CPU).

Чаще всего графические 3D-движки или системы рендеринга в игровых движках построены на графическом API, таком как Direct3D или OpenGL, который обеспечивает программную независимость. Использование низкоуровневых библиотек, например, DirectX, SDL и OpenAL позволяет обеспечить аппаратно-независимый доступ к другому аппаратному обеспечению компьютера, например, устройствам ввода (мышь, клавиатура и джойстик), сетевым и звуковым картам.

Физический движок (англ. physics engine) ˗ программный движок, который производит компьютерное моделирование физических законов реального мира в виртуальном пространстве 3D-сцены с той или иной степенью аппроксимации. Чаще всего физические движки используются не как отдельные самостоятельные программные продукты, а как составные компоненты других программ. Выделяют игровые и научные физические движки.

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

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

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

На практике физический движок позволяет наполнить виртуальное 3D пространство статическими и динамическими объектами – телами (англ. body), указать некие общие законы взаимодействия тел и среды в этом пространстве, в той или иной мере приближенные к физическим, задавая при этом характер и степень взаимодействий (импульсы, силы, и т. д). Собственно расчёт взаимодействия тел движок и берёт на себя. Когда простого набора объектов, взаимодействующих по определённым законам в виртуальном пространстве, недостаточно, в силу неполного приближения физической модели к реальной, возможно добавлять к телам связи (англ. joint, «соединение»). Связи представляют собой ограничения объектов физики, каждое из которых может накладываться на одно или два тела. Рассчитывая взаимодействие тел между собой и со средой, физический движок приближает физическую модель получаемой системы к реальной, передавая уточнённые геометрические данные в графический движок. Unity3d в качестве физического движка использует Nvidia's PhysX engine.

 

1.3. Терминология Unity3d

 

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

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

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

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

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

 

 

2. Интерфейс Unity3d. Создание простейших моделей твердых тел. Добавление массы, гравитации к твердому телу

Для создания нового проекта необходимо запустить среду Unity3d и создать новый проект (File g New Project, рис. 1).

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

 

Unity3d содержит набор базовых пакетов с различными физическими свойствами. Для создания стандартных геометрических моделей (куб, сферы и т.д.) и затем задания гравитационных свойств этим объектам нам потребуются, соответственно, пакеты PhysicMaterials.UnityPackage и StandartAssets (Mobile).UnityPackage. Для добавления пакетов в новый проект в открывшемся окне (рис. 2) выбираем вкладку Create New Project, указываем путь к текущей рабочей папке с проектом, и отмечаем необходимые пакеты. Рассмотрим окно пустого проекта в Unity3d и его основные элементы (рис. 3).

 

Рис. 2. Окно выбора стандартных пакетов

 

Рис. 3. Окно пустого проекта в Unity3d: 1 – окно сцены (Scene); 2 – окно запуска и просмотра игры (Game); 3 – окно иерархии объектов (Hierarchy); 4 – окно инспектора префабов и ресурсов (Project); 5 – окно предварительного просмотра сцены (Camera Preview); 6 – окно инспектора компонентов и их свойств (Inspector)

 

Интерфейс Unity3d является гибко настраиваемым под нужды разработчика. Так, при выделении в любом элементе окна текущей вкладки с помощью контекстного меню, она может быть дополнена новой (Add Tab) или удалена (Close Tab) (рис. 4).

Рис. 4. Настройка вкладок Unity3d в рабочем окне проекта

Инспектор префабов и используемых ресурсов (Project) содержит ссылки на файлы добавленных в проект моделей, текстур, звуков, скриптов, а также специальные объекты – префабы, предназначенные для дальнейшего повторного использования объектов в проекте.

Иерархия объектов (Hierarchy) – это список всех объектов на текущем уровне, показывающий также их отношения наследования (Parent-Child).

Инспектор компонентов и их свойств (Inspector) характеризует выделенный в данный момент объект – модель, текстуру, префаб и т.д., отображаемый в окне иерархии объектов(Hierarchy).

Добавление к проекту стандартного геометрического объекта Unity3d осуществляется на вкладке GameObject в главном меню.В качестве простейших объектов в сцену проекта могут быть добавлены геометрические объекты (куб, сфера, цилиндр и т.д.), источники освещения, камера.

Рис. 5. Добавление к проекту простейшего геометрического объекта

 

Выберем на этой вкладке пункт Cube для создания в текущей сцене объекта «куб» (GameObject g Create Otherg Cube, рис. 5), изображение которого в трехмерной системе координат показано на рис. 6, а.

а) б)

Рис. 6.

Рассмотрим, что представляет собой только что созданный геометрический объект. Если выделить его в окне иерархии объектов или в окне сцены, то в окне инспектора мы увидим список связанных с объектом компонентов (рис. 6, б).

Transform – это компонент, отвечающий за положение объекта в пространстве в мировой системе координат и имеющийся у любого игрового объекта. Он хранит в себе переменные – координаты объекта в трехмерном пространстве x, y, z; данные о повороте его относительно осей координат, а также методы для изменения этих параметров. Также он отвечает за иерархию объектов на сцене: свойство parent может содержать ссылку на другой аналогичный компонент Transform, являющийся родительским по отношению к данному. Если родительский компонент при этом двигается или вращается, вместе с ним двигается и вращается и дочерний. Дочерний же может свободно двигаться и вращаться, при этом его перемещения не оказывают влияние на родительский компонент. Чтобы лучше понять этот момент, посмотрите на свою руку: когда вы двигаете ладонью, пальцы перемещаются вместе с ней, а шевеление пальцами ни в коей мере не затрагивает ладонь. В этой ситуации ладонь является родительским элементом для пальцев.

Mesh filter – компонент, хранящий в себе трехмерную модель объекта, в данном случае – это кубический примитив (рис. 6, б).

Mesh Renderer – компонент, который дополняет геометрические данные о трехмерной модели из вышеуказанного компонента Mesh filter текстурой (текстурные координат) и применяет шейдеры, в результате чего мы получаем на экране полноценную модель такой, как она должна выглядеть. Также этот компонент позволяет включить/отключить свойство отбрасывания теней объектом и на объект.

Box Collider – компонент, хранящий в себе трехмерную модель «коллизий», то есть ту модель, по которой физический движок рассчитывает столкновения между объектами или со средой. Модель, указанная в данном случае как Box Collider (рис. 6, б), отображается на сцене в виде зеленого каркаса. Варьируя переменными x,y,z центра масс (Center) и его размера (Size), возможно существенным образом менять характер взаимодействия объектов.

Для того чтобы созданный куб имел под собой основание в виде плоской поверхности, необходимо создать для него объект «плоскость» (GameObject g Create Otherg Plane) (рис. 7).

Рис. 7.

Как видно из рисунка, цвет куба теряется в пространстве сцены, т.е. сливается по цвету с вновь созданным объектом плоской поверхности. Для исключения этого необходимо создать для объекта освещение. Добавление к проекту точечного освещения объектов также осуществляется в том же меню(GameObject g Create Otherg Point Light) (рис. 8).

 

Рис. 8.

 

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

Для того, чтобы разместить камеру не просто в «пространстве среды», а на конкретной плоскости, необходимо в окне иерархии созданных объектов проекта указать созданную нами ранее плоскость, после чего создать камеру (GameObject g Create Otherg Camera, рис. 9):

Рис. 9.

Воспользовавшись кнопкой перетаскивания объектов , расположим их примерно так, как это показано на рис. 10. При этом предварительное изображение с камеры среды соответствует изображении. на рис. 11.

 

 

Рис. 10.

 

 

Рис. 11.

 

Теперь при нажатии управляющей кнопки “ Play ” в окне проекта Game отобразится статическая сцена, в которой кубический объект нависает над плоскостью (рис.12).

Рис. 12.

 

Для установления взаимодействия между созданными геометрическими объектами необходимо добавить к ним соответствующие физические свойства. Физический движок среды используют систему динамики твердых тел (Rigid Body), для создания реалистичного движения. Это означает, что вместо статичных объектов, находящихся в виртуальном пространстве сцены, мы имеем объекты, у которых могут быть следующие свойства: масса (Mass), гравитация (Use Gravity) и другие. Так, свойства массы или гравитациидобавляются к объекту с помощью компонента Rigidbody (Component g Physics g Rigidbody). В соответствующих полях переменных этого компонента mass и drag в окне инспектора компонентов (Inspector) выставляются величины массы и скорости падения (притяжения к земле) согласно рис. 13, при этом в окне иерархии куб должен оставаться выделенным:

Рис. 13.

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

Изменение физических свойства куба можно осуществить в компоненте BoxCollider, одним из параметров которого является материал (Material). По умолчанию значение этого параметра выставляется в значении None.

Поскольку при создании проекта был подключен стандартный набор ресурсов PhysicMaterials.UnityPackage, то в проекте появляется возможность использования нескольких стандартных физических материалов Unity3d. Указание в качестве параметра упругого материала (Bouncy) позволяет добиться отскока куба от плоской поверхности за счет указанного физического свойства.

Задание к лабораторной работе №1

 

1) Познакомьтесь с особенностями моделирования простейших трехмерных геометрических моделей в среде Unity3d (по п. 2 методических указаний).

2) Освойте приемы моделирования трехмерных геометрических объектов и их физических свойств с помощью компонентов Transform, Rigidbody, BoxCollider в новом проекте в среде Unity3d.

3) Освойте приемы организации взаимодействия объектов за счет добавления гравитации и массы к 3d-объектам в этом проекте.

4) Сохраните файл и проекта по п. 2 и предоставьте преподавателю.

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

Контрольные вопросы

1) Каковы основные элементы рабочего окна среды Unity3d?

2) В чем сущность использования принципа родительских и дочерних компонентов?

3) Как изменится взаимодействие объектов в сцене при увеличении переменной Size компонента BoxCollider?

4) Объясните назначение параметра Is Kinematic компонента Rigidbody.

5) Объясните назначение параметра Angular Drag компонента Rigidbody.

6) Для чего предназначено свойство Cast Shadows компонента Mesh Renderer?

3. Основы взаимодействия (столкновения) между объектами. Применение скриптов на языке C#.

 

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

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

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

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

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

Рис. 14. Изменение размеров объекта в Unity3d

 

Рис. 15.

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

Рис. 16. Вращение (поворот) объектов в unity3d

Далее переключившись в режим просмотра Game, можно наблюдать следующую сцену (рис. 16):

Рис. 16. Сцена взаимодействия объектов

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

Рис. 17. Переименование объектов

 

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

Рис. 18. Встроенный редактор скриптов Unity3d – “MonoDevelop-Unity”

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

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

Рассмотрим следующий код:

 

using UnityEngine; using System.Collections;   public class Dialog: MonoBehaviour { // Метод-функция, вызываемая при столкновении объектов void OnCollisionEnter() { Debug.Log("Hit Something"); // Передаем сообщение в консоль Unity } }

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

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

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

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

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

Рис. 19. Просмотр сообщений консоли Unity3d

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

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

 

// Теперь метод принимает объект класса Collision, с которым происходит столкновениеvoid OnCollisionEnter(Collision myCollision) { // определение столкновения с двумя разноименными объектами if (myCollision.gameObject.name == "Zemlya") { // Обращаемся к имени объекта, с которым столкнулись Debug.Log("Stolknulsya s Zemlei"); } else if (myCollision.gameObject.name == "Stena") { Debug.Log("Stolknulsya sо Stenoi "); } }

После открытия консоли (Window à Console) мы увидим, с какими именно объектами столкнулся объект (рис. 20).

Рис. 20. Просмотр сообщений столкнувшихся объектах консоли Unity3d

Таким образом Unity3d позволяет нам оценить возможности взаимодействия объектов внутри среды.



Поделиться:




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

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


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