Страницы

пятница, 30 августа 2013 г.

Unity3D.basic.Step_4 - Создание и расстановка объектов

 [<]назад[<] -- [^]оглавление[^] -- [>]вперед[>]

Терминология:

  • Материал (Material) - это компоненты Unity3D, обеспечивающие связку шейдера с текстурами. Почти все компоненты прорисовывающие графику, принимают не текстуры, а именно материалы. Подробнее о материалах в конце статьи(чтобы лучше понять их смысл - посмотрите изображение в статье по ссылке);
  • Меш (Mesh) - "набор вершин и многоугольников, определяющих форму трёхмерного объекта". Проще говоря - трехмерная модель;
  • Рендеринг (англ. rendering — «визуализация») - превращение неких данных(даже не обязательно изначально графических), в изображение сохраняемое или выводимое, к примеру, на экран;
  • Спрайт (Sprite) - это не напиток, а "графический объект в компьютерной графике". Проще говоря картинка;
  • Шейдер (Shader) - программная инструкция видеокарте, о том как именно нужно прорисовывать картинки. Обычная текстура, в зависимости от выбранного шейдера, может оказаться размыта, деформирована или изменена намного более сложными алгоритмами, однако обо всем этом заботится шейдерный программист. Это редкий случай, когда необходимо писать свой шейдер, а не пользоваться готовыми.


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


Добавьте на сцену новый пустой объект. Для этого выберите в меню "GameObject"->"Create Empty" или нажмите Ctrl+Shift+N. Ваш экран должен выглядеть примерно так:


В окне Hierarchy должен появиться объект "GameObject", в окне Scene якоря трансформации, а в окне Inspector должна появиться возможность редактировать свойства компонентов этого объекта. Если в последних двух окнах нет изменений, выделите объект "GameObject" в окне Hierarchy нажатием левой кнопки мыши.
Но СТОП! У этого объекта уже есть какие то свойства и какой то компонент(вы ведь догадались, что штука в инспекторе - это компонент, правда ведь?), хотя мы просто добавили в сцену пустой объект. Дело в том, что каждый объект, всегда должен иметь один обязательный компонент, который нельзя, ни добавить (некоторые компоненты можно добавить по несколько экзмепляров на один объект), ни удалить. И это всегда компонент Transform, который имеет три свойства: положение в пространстве (Position), поворот (Rotation) и размеры (Scale). Только не отвлекайтесь пока на них, давайте сделаем что то более видимое!

Можете снять выделение, нажав в любом месте сцены или в свободную зону в иерархии, либо даже переключиться на вид камеры, сменив окно на "Game". Ну как? Ничего не видно? Потому что в объекте ничего нет, что бы отвечало за какую то прорисовку. Скажу по секрету, что иногда в сцене бывает куча объектов, которые вообще не влияют на игровой процесс явно. Бывает, что такие объекты являются невидимыми носителями кода, которые контролируют сцену. Что то типа вселенского разума. Мы не можем его ощутить, но он контролирует наш уровень!

И все же нам нужен видимый результат, а не вера в то что все работает. Чтобы игровой объект получил какой то новый функционал, нужно сделать что? Правильно, добавить компонент реализующий этот функционал (в 90% простых задач, все решается поиском и добавлением компонента). Помните прорисовку текстуры из предыдущего шага? На самом деле все намного сложнее.. Для начала найдите текстуру. Например такую, например здесь:



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

Так как Unity3D – движок трехмерный, то просто нарисовать спрайт не удастся. Сперва нужно указать на какой меш нужно наносить рисунок. Для этого есть встроенный компонент "Mesh Filter". Чтобы добавить его, выделите наш объект "GameObject" в окне иерархии, а в окне Inspector нажать кнопку "Add Component" и выберите в меню "Mesh"->"Mesh Filter". Теперь осталось только выбрать необходимую модель. К счастью, существует несколько встроенных примитивов, которыми мы и воспользуемся. В инспекторе, найдите добавленный компонент "Mesh Filter" и его единственное свойство "Mesh". Нажмите на маленький кружок справа и в открывшемся диалоге выберите "Capsule".

По прежнему ничего не появилось. А причиной тому то, что мы не нанесли никакой текстуры на нашу меш-сетку. Невероятно, но факт: для прорисовки текстуры нужен еще один компонент - "Mesh Renderer". Добавьте ее через меню "Component"->"Mesh"->"Mesh Renderer". Но давайте воспользуемся тем что Unity3D умная и старается нам во многом помочь и просто перетащим нашу текстуру из окна проекта на капсулу в окне сцены(альтернатива - перетянуть текстуру в инспектор, выделенной капсулы). Капсула должна стать желтой и со смайликом! Если она слишком маленькая в окне сцены, приблизьтесь к ней, переместив курсор в окно сцены и зажав правую кнопку мыши двигаейтесь по сцене с помощью кнопок WASD и перемещения мыши. Либо просто нажмите два раза по объекту в иерархии.

А заметили ли вы, что в файлах проекта появилась новая папка "Materials" с каким то новым файлом? Вся штука в том, что текстуру тоже нельзя так просто наложить на меш. Для любой текстуры, которую необходимо прорисовать, нужно подобрать шейдер. Для связывания шейдера с текстурами, в Unity3D используются материалы (Materials).

Таким образом, на нашей капсуле был создан компонент "Mesh Renderer"(который впрочем доступен в меню "Mesh"->"Mesh Renderer"), у которого был установлен материал, который так же был автоматически создан и на него была повешена наша текстура. Если вы хотите создать его вручную, то это делается через контекстное меню в файлах проекта("Create"->"Material"). В результате, вы должны увидеть нечто подобное:


Вам не кажется, что отрендеренная картинка в окне "Game" слишком темная? Собственно, это и есть результат работы шейдеров. Картинка прорисовывается с освещением по умолчанию. Можете попробовать сменить шейдер материала с "Diffuse" на "Unlit"->"Texture" (unlit - группа шейдеров, ориентированная на прорисовку без освещения), либо добавив источник света, выбрав в иерархии "Create"->"Directional light".

Давайте немного поиграем с объектом. Обратите внимание на панель инструментов в левом мерхнем углу окна Unity3D.


Эти 4 инструмента помогут вам редактировать сцену:
  • Рука – предназначена для перетаскивания сцены вслед за курсором мыши. Просто схватите сцену в любом месте и тяните;
  • Перемещение – позволяет перемещать выделенные объекты за якоря. Выберите объект и вы увидите якоря осей, якоря сторон и центральный якорь;
  • Поворот – контролирует вращение объекта, по трем осям;
  • Скалирование – позволяет менять размеры объекта, по осям или в общем.
Так же мы можете менять эти значения вручную в компоненте "Transform", вводя точные значение в поля или же изменяя плавно, зажав левой кнопкой мыши и перетягивая в сторону, имя нужной координаты (X, Y или Z).

Попробуйте создать пару копий нашей капсулы, нажатием Ctrl+D или выбором в контекстном меню пункта "Duplicate". Можете попробовать создать и другие готовые примитивные объекты(Cube, Sphere, Capsule, Cylinder, Plane, Quad), через пункт "Create", в иерархии.

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

Напоследок, попробуйте сохранить сцену "File"->"Save Scene" (Ctrl+S). Unity3D предложит выбрать место сохранения. Сохраните ее в папке Assets или в любой подпапке. Изменение структуры, незамедлительно отобразится в файлах вашего проекта. Теперь вы можете порождать новые сцены "File"->"New Scene" (Ctrl+N), сохранять их и выбирать их в окне "Projects".

Заключение:

И что же мы имеем к концу первого дня? На практике, практически ничего. Неинтерактивное приложение. Результат - менее нагляден чем в сотнях чужих туториалов, которые мне довелось прочитать.
Однако, мне верится, что я вложил максимум теории, необходимой для начального понимания (а иначе почему же мне пришлось читать сотни туториалов), в самом понятном виде. Впереди значительно больше интерактива, функционала и множества других сложностей!

 [<]назад[<] -- [^]оглавление[^] -- [>]вперед[>]

Комментариев нет :

Отправить комментарий