Страница 1 из 2

3D Platform Tutorial. Перевод

СообщениеДобавлено: 15 май 2009, 12:26
alexmarch
Всем привет.
Этот урок для начинающих взят вот тут.
Я решил его пройти сам и перевести. Т.к. урок не маленький пост этот будет постоянно редактироваться пока не закончим его окончательно.
Поправки и дополнения всегда приветствуются.
Я не буду переводить весь мануал целиком. я переведу лишь самое мясо, техническую часть.
Эта статья расширена и дополнена с незаконченного перевода тутора платформера Ovod-ом, без какого либо на то с его стороны согласия. :)
-----------------------------------------------------------------

Изображение

3D Platformer Tutorial
Построение 3D игр на платформе Unity 2.0
(от ред.- т.к. этот тутор писался для версии 2.0, последняя 2.5, скриншоты будут немного отличаться.)
Что мы узнаем из этого урока?
В этом руководстве в основном внимание уделяется технической стороне построения игры в Unity, охватывающего
следующее:
•Character Controllers
• Projectors
• Audio Listeners, Audio Sources & Audio Clips
• Multiple Cameras (и для переключения между ними)
• UnityGUI scripting system
• Colliders (Столкновения)
• Messages & events (сообщения и события)
• Lighting (освещение)
• Particle systems (Партикли, эффекты взрывов, дыма и т.д.)
• Blob shadows (тени)
• Scripting (AI, state machines, player controls)

Этот туториал покажет, каким образом эти функции могут быть использованы вместе для создания игр.

Что вы должны уже знать:
Это руководство активно использует скрипты поэтому вы должны быть знакомы с
хотя бы из одним поддерживаемых языков JavaScript, C# или Boo.
Кроме того, предполагается, что вы знакомы с интерфейсом Unity что бы,
выполнять основные операции, такие, как размещение Asset-тов на сцене, добавлять компоненты
и GameObject-ы и редактировать свойства в инспекторе и т.д.

Организация проекта:
Unity не принуждает вас к конкретной организации ресурсов вашего проекта.
Мы можете предпочесть организацию ваших ресурсов по типу, к примеру "Textures", "Models", "Sound effects" и так далее. В Unity Technologies, мы считаем, что такая структура хорошо подходит для небольших проектов. Для более сложных проектов нашим пользователям обычно рекомендуется группировать ресурсы по функциям, к примеру собирая их вместе в папках вроде "Player", "Enemies", "Props", "Scenery" и так далее.
Проект данного урока был разработан рядом членов команды и вырос органично, отображая их различные соглашения и стили. Справедливости ради мы решили оставить организацию проекта прежней, так как она хорошо представляет организацию структуры 'малого' проекта.

Абстракции GameObjects & Компоненты
Дизайн Unity располагает ресурсы каждой сцены в центре процесса разработки.
Это делает доступным по большей части визуальный метод производства игр, где немалая доля работы выполняется с помощью простого перетягивания. Это идеально для груды дизайнерской работы над уровнями, но не все ресурсы могут быть отображены таким образом. Некоторые из них являются абстрактными, а не визуальными объектами, поэтому они представлены в виде условных абстрактных иконок и каркасных гизмо – к примеру источники звука (Audio Sources) и освещения (Lights) – или же не отображаются в Scene View вовсе. В эту категорию попадают скрипты.
Скрипты определяют, как ресурсы и GameObjects в сцене Unity взаимодействуют друг с другом; эта интерактивность является ядром всех игр. По этой причине правилом хорошего тона считается создание информативных комментариев внутри ваших скриптов.
Этот урок подразумевает, что вы можете читать приведенные скрипты и понимать множество комментариев, свободно изложенных по ходу их описания. Тем не менее, когда будет приводиться отдельная важная скриптовая техника или концепция, мы будем рассматривать ее в деталях.
Скрипты документированы с помощью обширных комментариев и к тому же были разработаны самопоясняющими, насколько было возможно. Мы рекомендуем вам читать скрипт по мере его появления в этом уроке, чтобы понять, как он работает. Не бойтесь также экспериментировать!


Файлы:
Наиболее актуальные файлы для данного проекта можно скачать тут
С этим файлом мы будем работать. Там приготовлено все для урока:
http://unity3d.com/support/resources/fi ... roject.zip (качаем это и не паримся)
А здесь находиться готовый вариант, что бы вы могли посмотреть что должно получиться
http://unity3d.com/support/resources/fi ... dpoint.zip
Это руководство предполагает, что Вы уже знаете основное управления Unity, такие, как размещение
объектов в сцене, поэтому первый отправной точкой будет Scene там уже есть основные декорации
и реквизита на месте.

Типографические Соглашения:

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

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

Скриптовый код обозначается следующим образом:
Код: Выделить всё
// Это пример скриптового кода.
Function Update()
{
DoSomething();
}


ПРИМЕЧАНИЕ
Скрипты, вошедшие в этот урок, обладают массой комментариев и разработаны так, чтобы им было легко следовать. Эти комментарии обычно опускаются во фрагментах кода для экономии текстового пространства и приводятся отдельно.
Actions you need to perform within Unity are shown like this:
[unity 3D] - Нажмите на это;
[unity 3D] - Затем на это;
[unity 3D] - Затем нажмите Play.
Скриптовые имена, ресурсы, элементы меню или Свойства Инспектора (Inspector Properties) показаны жирным текстом. И наоборот, моноширинный шриф используется для скриптовых функций и наименований событий, например функция Update() в примере скрипта выше.

Соглашения Unity:
Unity является уникальной системой разработки. Большинство разработчиков будет работать в редакторе кода, расходуя 90% своего времени на редактирование кода, а также на написание кода для загрузки и использования ресурсов. В этом плане Unity отличается: он ресурсо-центрирован, а не кодо-центрирован и фокусируется на ресурсах подобно приложению 3D моделирования. По этой причине стоит понять ключевые соглашения и уникальную терминологию разработки на Unity:

Проекты (Projects):
Игра, созданная в Unity будет состоять из Проекта (Project). Он будет содержать все элементы вашего проекта, такие, как модели, скрипты, уровни, меню и т.п. Обычно, один файл Проекта будет содержать все элементы вашей игры. Когда вы запускаете Unity 2, первое, что происходит, это запуск файла Проекта. (Если вы только что установили Unity, это будет файл Проекта, содержащий Island Demo.)

Сцены (Scenes)
Каждый Проект состоит из одного или более документов, называемых Сценами (Scenes). Одна сцена будет содержать один игровой уровень, но большие элементы пользовательского интерфейса, такие, как игровые меню, последовательности завершения игры или большие ролики могут также располагаться в своих собственных файлах Сцен.
Сложные игры могут даже использовать целые Сцены в целях инициализации. Таким образом, все уровни игры скорее всего будут Сценами, хотя Сцена не обязана быть игровым уровнем.

Игровые Объекты, Компоненты, Ресурсы и Шаблоны (GameObjects, Components, Assets & Prefabs)
Ключом к пониманию Unity является связь между GameObject и Компонентом.

UnityGameObjects:
GameObject – это фундаментальный строительный блок в Unity. GameObject – это контейнер для разных частей функциональности, называемых Компонентами. GameObject почти всегда содержит более одного Компонента. Все GameObjects содержат Компонент Трансформации (Transform Component), определяющий их позицию и ориентацию.

Иерархии GameObject
Действительной мощью GameObject является его способность содержать в себе другие GameObjects, действуя подобно папке в OS X Finder. Это делает возможной иерархическую организацию GameObjects, таким образом, составная модель или полная связка источников освещения может быть определена одним GameObject. (По факту, большая часть моделей появляется в Unity как иерархия GameObjects, потому, что это отражает структуру, которая была создана в пакете моделирования.) GameObject, заданный внутри другого GameObject является потомственным GameObject.

Компоненты (Components)
Компоненты являются строительными блоками GameObjects. Без них GameObject не мог бы сделать ничего интересного.
Компонент может представлять видимые объекты, такие, как меши, материалы, данные о ландшафте или систему частиц. Другие типы компонентов более абстрактны, например Камеры или Источники Освещения, которые не имеют представления физической модели вовсе; вместо этого вы увидите иконку и определенные каркасные обозначения, отображающие их ключевые особенности.
Компонент всегда привязан к GameObject; он не может жить самостоятельно. Множество Компонентов может быть привязано к одному GameObject. GameObjects может поддерживать множество Компонентов определенных типов — GameObject может содержать любое количество скриптов, к примеру. Но другие, как те, например, что определяют системы частиц, эксклюзивны и могут появляться лишь единожды в одном GameObject. Например, если вы хотите определить множество систем частиц, вам, как правило, придется использовать иерархию GameObjects, каждый из которых содержит свой собственный набор Компонентов системы частиц.

Ресурсы (Assets)
Все ваши импортированные Ресурсы появляются в панели Project и могут являться практически чем угодно, от материала или текстуры до аудио файлов, готовых к использованию и шаблонных GameObject (известных, как “Prefab”).
Ресурсы могут быть простыми или сложными; от единичного аудио файла или файла изображения PNG, вплоть до сложной иерархии потомственных GameObjects и Компонентов, определяющих всего один элемент вашей игры.
Например, Шаблон (Prefab) игрового персонажа может быть задан как единичный Ресурс, содержащий модель и ассоциированные с ней анимации. Он также может содержать Компонент скрипта, аудио клипы и любые другие Компоненты, которые необходимы для его функционирования, вам лишь остается просто перетянуть его в панель Scene и получить полностью работающий аватар.

Пользовательские Иконки и Гизмо
Вы можете сделать так, чтобы Unity отображал пользовательские иконки и другую визуальную информацию для ваших Ресурсов (Assets), если захотите. Мы рассмотрим пример этого в следующем разделе.

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

Шаблоны (Prefabs)
Шаблон (Prefab) – это Ресурс (Asset), который был определен, как эталонный. Для Unity это все равно, что шаблонный документ для текстового редактора. Когда вы размещаете Шаблон в вашей Сцене, на панели Hierarchy Unity размещает лишь ссылку на Шаблон, но не полную копию. Это называется клонированием. Каждая ссылка, которую вы создали, является клоном Шаблона.
Если вы щелкните на Шаблон на панели Project и отрегулируете его настройки, вы обнаружите, что все эти изменения немедленно отразились на всех клонах этого Шаблона в вашей Сцене. Это делает Шаблоны идеальными для многократного использования элементов, таких, как пули, враги и т.п. Если вы обнаружили, что ваш враг ведет себя неправильно, вам необходимо лишь отрегулировать скрипт или настройки в оригинальном Шаблоне, вместо индивидуального редактирования каждого врага в Сцене.
Тем не менее, если вы хотите изменить пару настроек определенного клона Шаблона, вы также можете это сделать: эти изменения отразятся только на отдельном клоне.
Шаблоны выделяются голубым цветом на обеих панелях: и в Project, и в Hierarchy.

ПРИМЕЧАНИЕ
Клон Шаблона не может обладать дополнительными Компонентами, добавленными после его создания, так как это разорвет связь с оригинальным Шаблоном. Unity предупредит вас, если вы попытаетесь это сделать. Тем не менее, Unity позволяет вам дополнить оригинальный Шаблон теми изменениями, после которых произошел разрыв связи.

Дополнения
Этот урок не мог быть создан без следующих людей:
David Helgason, Joachim Ante, Tom Higgins, Sam Kalman, Keli Hlodversson, Nicholas Francis, Aras Pranckevičius, Forest Johnson и, конечно же, Ethan Vosburgh, который предоставил прекрасные ресурсы для этого урока.

Первые шаги:
Lerpz - это имя инопланетянина который присутствует в проекте.
Разместим на сцене Lerpz-а
[unity 3D] - Откройте проект, выбираем окно просмотра Scene.
[unity 3D] - Закладка Project -> Scenes->TheGame - кликаем
[unity 3D] - Перетаскиваем сборку(Prefab) Lerpz(из закладки Project -> Player) прямо в окно сцены, в закладке Hierarchy должен отобразиться Lerpz
[unity 3D] - Кликаем по новому Lerpz в закладке Hierarchy и переименовываем в Player;
[unity 3D] - Выделите Player object, переместите мышь в окно Scene и
нажмите клавишу F (focus) и вас переместит к центру Lerpz модели.
[unity 3D] - Переместите Lerpz на подиум, что недалеко от тюрьмы. (См. скриншот.)

Если нажать кнопку Play, увидите Lerpz стоит во дворе тюрьмы.
На данном этапе, Lerpz не может двигаться а камера должна быть связанна с
нашим игроком.
[unity 3D] - Нажмите на кнопку play, чтобы остановить игру.
Мы должны заставить двигаться Lerpz-а, но сначала, мы должны остановиться на нашей камере.


Позиционирование Lerpz-а на сцене.
Изображение

Файлы этого тутора включает в себя несколько различных скриптов камеры, но
для целей нашего урока мы будем использовать SpringFollowCamera. Вы найдете ее в закладке Project -> Scripts -> Camera .
[unity 3D] - Перетащите SpringFollowCamera скрипт из Project панели на Камеру(NearCamera) в Hierarchy панели. (Таким образом вы сообщите камере что она будет использовать этот скрипт)
[unity 3D] - Кликаем Play.
Вы получите сообщение об ошибке
[unity 3D] - Откройте Debug Console (Cmd + Shift + C / Ctrl + Shift + C на ПК), если она еще не видна.

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

"Нет цели" сообщение об ошибке.
Изображение


Всякий раз, когда это возможно, Debug Log окно будет показывать линию на
GameObject в Hierarchy (или к Project панели если ошибка
в (Prefab)сборки или Срипте).

Ошибка типа UnassignedReferenceException - это, то что Вы будете вероятно видеть очень
часто, если Вы плохо знакомы с Unity. Это кажется страшным,(от ред- мне тоже : ) но всего навсего, это означает, то, что у скрипта
не была установлена target переменная.

[unity 3D] - Нажмите на NearCamera объект в иерархии панели и посмотрите на Spring Follow Camera (Script) Компонент свойств.
Посмотрим на свойство Target, там установлено None (Transform), это свойство определяет целевой объект, который нужен для работы скрипта.
[unity 3D] - Остановите игру, если вы еще этого не сделали.
[unity 3D] - Если она еще не выбрана, нажмите на NearCamera в Hierarchy панели.
[unity 3D] - Перетащите Player от Hierarchy Панели на Target.

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

Если нажать кнопку Play камера еще не будет работать. Вы увидите ошибки, связанные с
SpringFollowCamera скрипте, т.к скрипт работает совместно с другим скриптом ThirdPersonController.
Это объясняется тем, что камера от третьего лица(SpringFollowCamera ) тесно связана
к контролем игрока(ThirdPersonController): он(скрипт - SpringFollowCamera ) должен знать, что игрок делает так, чтобы она смогла реагировать в
соответствии его действиям.

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

настройки камеры скрипта (Spring Follow Camera)
Изображение

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

This is the first in a series of dependencies that we need to deal with. (Это первая в серии зависимостей, которые мы должны решать.) -????

[unity 3D] - Завершение соединения между camera и player. Возьмем ThirdPersonController скрипт. Он находиться в Project панели -> Scripts->Player и перетаскиваем в на наш Player (в иерархии панели)
Third Person Controller скрипт также имеет свои собственные требования и зависимости. Наиболее важным из них является Character Controller component. К счастью, скрипт уже говорит Unity об этом, таким образом Unity добавит этот компонент для нас.

Сейчас нам нужно добавить тег к нашим Player GameObject. Это объясняется тем, что скрипты ищут
Player-a на сцене, через Теги.
[unity 3D] - В Inspector-е откройте раскрывающемся меню тегов (Tag) и выбрать "Player" tag, как показано ниже (от ред. - хотя у меня он подефолту уже был выставлен на Player)

Выбор Player tag
Изображение

ПРИМЕЧАНИЕ
Тэги, перечисленные в меню, указанные выше, предоставляемые Unity по умолчанию.
Мы узнаем, как создать наши собственные Tag-и и Layers-сы позже.


Теги будут использовать позже, так что вернемся к Character Controller и нашему скрипту.
[unity 3D] - Выберите Player объект и смотритие в инспекторе. Он должен выглядеть следующим
образом:

Character Controller и Third Person Controller скрипт компонент на месте.
Изображение

Наш следующий шаг заключается в том, чтобы изменить Character Controller. На данный момент, Capsule Collider (Капсула столкновений) она расположена слишком далеко вниз на оси Y, и Lerpz стоит на пустом месте. (А точнее весит в воздухе)
(Вы можете увидеть Collider позицию на Scene View: она зеленой цилиндрической
формы.) Мы должны изменить позицию капсулы по Y

Капсула столкновений отображена зеленой
Изображение

[unity 3D] - Установите новую позицию для Capsule Collider, сделать это можно в Player -> строка Center (см. криншот ниже)
(от ред. - В мануале рекомендуют значения для Y - 1.03)

Настройка положения Capsule Collider
Изображение

Если вы кликните Play, Lerpz будет двигаться (клавиши a,w,s,d,) строго по уровню земли.

The Character Controller и Third Person Controller скрипт.

В большинстве игр, игрок способен на невозможные физические подвиги, повороты,
мгновенные остановки, прыжки на невероятные расстояния и другие действия,
которые было бы трудно использовать в традиционной модели физики.
Character Controller поэтому расцепляет нашего игрока от механизма физики, обеспечивая
основные средства управления над движением.
Character Controller упрощает манипуляцией игрока (Player) и многих других не Player-ных типов (от ред. - NPC например)
Character Controller состоит из капсулы столкновений (capsule collider) которая связана с основной системой движения,
позволяя нашему Герою перемещаться, двигаться вверх или вниз по наклону.
Вы можете изменить максимальный шаг и наклон в установках инспектора. (параметр Slope Limit)
(от ред. - Более подробно о Character Controller можете прочитать в справке тут.
Character Controller как правило, используются в скрипте. Использование Character Controller скриптом расширяет его возможности для удовлетворения потребности в игре. В нашем проекте, в Third Person Controller скрипт выполняет эту функцию, и добавляет, необходимую
поддержку платформы для нашей игры. В нем оговариваться джойстик, клавиатура, мышь или
другие устройства ввода и действия под ее контролем игрока.
Edit->Project Settings->Input Manager настройки для устройств ввода, управления.

ПРИМЕЧАНИЕ
Нет никаких специальных скриптов, которые мы , будем использывать для Player-a. Они
совершенно обычные скрипты Unity, которые были встроены для этого проекта.
Нет никакого заданного по умолчанию Character Controller скрипта.


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

Анимирование Lerpz-а

Сейчас Lerpz только скользит по пейзажу. Потому что Character Controller не обрабатывается анимацией. И правильно делает :) Так как она ничего не знает о нашей модели игрока и какие последовательности мультипликации относятся к каждому движению. Нам необходимо подключить
Lerpz-а к его анимационной последовательности, и это делается с помощью ThirdPersonPlayerAnimation Скрипт-а.

[unity 3D] - Выделим Player в иерархии, жмем на Component меню и добавляем ThirdPersonPlayerAnimation скрипт для Player game object.
(От ред. - Упссс но я там не нашел то что нам сказали в мануале. Это лежит тут Панель Project -> Scripts -> Player -> ThirdPersonPlayerAnimation, хватаем его мышкой и тащим в иерархическую панель на нашего Player. Тут же можно увидеть в инспекторе как добавилась ссылка на скрипт)

Если нажать кнопку Play сейчас, вы увидите правильно анимированного Lerpz-а .
Так что же происходит? Что делает этот скрипт ? Ответ заключается в том, как Unity обрабатывает персонажную анимацию.

Third Person Player Animation скрипт

Модель Lerpz, которую мы используем, была создана для множественных проектов и содержит пятнадцать
последовательных анимаций. Только одиннадцать используются в этой обучающей программе. Если Вы выбираете Player
object в панели Hierarchy и посмотрите в Инспектор, Вы уведите все пятнадцать анимации
последовательно перечислены в пределах компонента Анимации, из которых только следующие
фактически используется в данном руководстве:
• Walk -- Обычная хотьба.
• Run -- Бегущая анимация. (Hold the Option key while playing to run.)
• Punch --Когда игрок нападает на противника, робота охранника
• Jump -- Прыжки.
• Jump fall -- Когда Lerpz достигает пика прыжка и начинает падать.
• Idle -- Когда Lerpz нефига не делает.
• Wall jump -- переворот назад анимация когда Lerpz прыгает со стены. - (от ред. - не знаю, может не правильно перевел)
• Jet-pack Jump -- Когда Lerpz's замедляется при падение.
• Ledge fall -- Выполняеться, когда Lerpz сходит с края платформы.
• Buttstomp -- Выполняеться, когда Lerpz получил люлей от охранка робота.
• Jump land -- Выполняеться, когда Lerpz после прыжка или падения.

Модели и анимации для Lerpz-а были созданы с помощью майя и импортированы в Unity.
За более подробной информацией об импорте мешей и анимации, пожалуйста, обращайтесь сюда.

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

Re: 3DPlatformTutorial(ver.2)

СообщениеДобавлено: 15 май 2009, 12:35
alexmarch
Jet-Pack

Это то что на спине у Lerpz-а
Изображение

На данный момент, наш персонаж передвигается и прыгает вокруг, но его реактивный Jet-Pack
пока не работает. Lerpz использует Jet-Pack для замедления темпов своего падения. Анимация падения уже есть,
но Jet-Pack излучает струи газа при работе. Чтобы сделать работу струй,
нам нужно будет добавить систему частиц (Particle Systems) , и точечный свет (Point Light). Система частиц
будет производить типа эффекта пламени, в то время точечный свет придаст иллюзию огня, действующая в качестве источника освещения.

ПРИМЕЧАНИЕ
Что такое система частиц (Particle System)?
Системы частиц выбрасывают десятки частиц - как правило, плоские 2D billboards или спрайты --
в 3D мире. Каждая частица представляется как материальная точка с дополнительными атрибутами, такими как скорость, цвет, ориентация в пространстве, угловая скорость, и т. п. В ходе работы программы моделирующей частицы, каждая частица изменяет своё состояние по определенному, общему для всех частиц системы, закону. В большинстве реализаций, новые частицы испускаются так называемым «эмиттером». Эмиттером может быть точка, тогда новые частицы будут возникать в одном месте. Так можно смоделировать например взрыв: эмиттером будет его эпицентр. Эмиттером может быть отрезок прямой или плоскость: например частицы дождя или снега должны возникать на высоко расположенной горизонтальной плоскости. Эмиттером может быть и произвольный геометрический объект: в этом случае новые частицы будут возникать на всей его поверхности.

На протяжении жизни частица редко остаётся в покое. Частицы могут двигаться, вращаться, менять свой цвет и/или прозрачность, и сталкиваться с трёхмерными объектами. Часто у частиц задана максимальная продолжительность жизни, по истечении которого частица исчезает.
Система может быть использована для моделирования огня, дыма, взрывов и Звездных полей.


Добавление Particle Systems

[unity 3D] - Используйте меню создать пустой GameObject в иерархии Панели. (crt+shift+N)
[unity 3D] - Переименуем наш новый GameObject в "Jet".
Выбираем новый Jet, и добавляем:
[unity 3D] - Ellipsoid Particle Emitter (Эллипсоидный эмиттер частиц) (от ред.- Жмем в меню Component -> Particles -> Ellipsoid Particle Emitter
[unity 3D] - Particle Animator
[unity 3D] - World Particle Collider
[unity 3D] - Particle Renderer
[unity 3D] - Снимите флажок “Enabled” в инспекторе для частиц видеообработки (Particle Renderer). Это позволит временно отключить его.
[unity 3D] - Хватаем и тащим наш Jet к выхлопной трубе Jet-Pack у Lerpz's -а.
[unity 3D] - Повторно активируйте частицы видеообработки. (от ред. - то то включите то выключите)
[unity 3D] - Установите настройки для Эллипсоидного эмиттера частиц, как показано ниже:

Настройки Ellipsoid Particle Emitter
Изображение

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

[unity 3D] - Теперь установите Particle Animator настройки как показано на рисунке:

Настройки Particle Animator. Значения в диаграмме определяют входы Color Animation. Не забывайте также
откорректировать другие параметры настройки !

Изображение

Particle Animator будет анимировать частицы цвета, по степени их исчезновения.
Частицы начинаются с белого цвета, с потемнением через желтый и оранжевый, так же как наша струя огня охлаждаться по мере удаления от возгорания. Так как мы собираемся запихнуть текстуру(огня) в каждую частицу, в Particle Animator будет использоваться оттенки этой текстуры, так что цвет анимации будет полупрозрачным, и мы надеемся эффективным. В диалоге цвета также поставте степень прозрачности Альфа канала. Поэкспериментируйте с настройками. Но сначала добавьте текстуру. Об этом будет сказано ниже.
Далее идет Particle Renderer. Этот компонент перерисовывает каждую частицу. Он также определяет материал для прорисовки частиц. Мы хотим, чтобы у нас было пламя типа реактивного эффекта, поэтому мы будем использовать материал "огня". Particles->Sources->Materials->fire add
(от ред. перетащите мышкой этот материал на Jet)

[unity 3D] - Установите значения как показано ниже

Установки Particle Renderer.
Изображение
Настройка Stretch Particles сообщает Unity должны ли части оставлять след от полета, в какой плоскости двигаться и т.д. Мы хотим, чтобы эти частицы немного растянулись в зависимости от их скорости.
CastShadows и параметры настройки ReceiveShadows не имеют никакого эффекта, если Вы не используете custom shader. Это - продвинутая тема выходит за рамки этого руководства.

Re: 3DPlatformTutorial(ver.2)

СообщениеДобавлено: 15 май 2009, 19:21
alexmarch
Добавление Освещения.

Наш реактивный Jet выглядит здорово, но это вдействительности иллюзия: система просто выплевывает много
крошечные изображений, но пламя не являться источником освещения и не дает свет. Для полной
иллюзии, мы создадим отдельный Point Light GameObject. Мы включим его в то же время, как будет извергаться пламя. В результате пламя будет освящать рядом стоящие объекты. (Мы будем использовать только одиночное освещение, а не
один свет на каждую струю, что бы сохранить производительность.)
[unity 3D] - Создать новый Point Light GameObject.
[unity 3D] - Название его "Jet Light" и устонавите на позицию между двумя турбинами на Jet pack-e.
[unity 3D] - Выделяем Jet Light и изменем настройки как показано на рисунке:

Jet-pack Light settings.
Изображение

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

Следующий шаг состоит в том, чтобы обновить Player GameObject подключить Jet и light objects.
Чтобы сделать это, мы создадим свою первую сборку (Prefab)Jet в Project панели так:

[unity 3D] - В Project панели, выберите (empty) Player folder, а затем нажмите кнопку Create...
[unity 3D] - Из выпадающего меню выберите, Prefab. Это позволит создать пустой Prefab.
[unity 3D] - Переименуем пустой Prefab в Jet.
[unity 3D] - Перетащите Jet объект из Hierarchy Панели на нашу новую сборку (Prefab). Jet Light пока не трогаем.

Имя Jet в панели Hierarchy должно стать синим цветом, это говорит нам о том, что в настоящее время оно связано
в сборку(Prefab).

[unity 3D] - Удаляем наш первоначальной Jet объект из Hierarchy панели. (Но пока нетрогаем наш Jet Light!)

Теперь мы добавим огненные струи (дважды) и освещение (один раз) нашему Player-у:

[unity 3D] - Идем в Player object в панели Hierarchy,
[unity 3D] - Открываем его пока не увидим дочернее дерево. (rootJoint.) torso
[unity 3D] - Перетащите Jet Prefab object на тот объект что указан выше, два раза.
[unity 3D] - Переименуем их Jet L и Jet R,
[unity 3D] - Бросьте Jet Light на тот же объект torso.(торс)
Теперь у вас должен быть один объект, в hierarchy-ии выглядит примерно так:

Jet-pack Hierarchy.
Изображение

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

[unity 3D] - Переместите JetLight в точке между двумя Jet Prefabs

Когда вы достигли этого, у Lerpz-а теперь есть две пламенных струи льющихся потоком от
его Jet-Pack. Мы почти у цели!
Последний шаг заключается в том, чтобы активировать Jet Prefabs и Jet Light только тогда, когда он
прыгает. Это достигается с помощью скриптов.

[unity 3D] - Найдите JetPackParticleController скрипт Scripts->Player и перетащите его
на наиболее верхнее место в Player объекте в Hierarchy панели.

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

Lerpz’s в прыжке.
Изображение

Добавление Теней (Blob Shadow).

Blob Тень является обманом. Вместо трассировки лучей света и проверки ее, упираются ли они во что нибудь,
мы просто проектируем темное изображение - в данном случае просто круглая черная клякса.
На что-либо ниже нашего персонажа. Это более быстро и более просто для графики,
таким образом это должно быстро работать на всех диапазонах аппаратных средств.
Unity подключает Blob-Shadow prefab в своей стандартной Standard Assets collection колекции,
поэтому мы будем использовать это вместо того, чтобы создавать нашу собственную. Этот asset-сы
уже импортированы и добавлены в проект в Blob-Shadow folder папку. Откройте эту папку в панели Project и кликнете
на blob shadow projector Prefab и перетащите на верхний уровень нашего объекта Player в Hierarchy Панели.

Blob Shadow Projector Prefab в Player’s hierarchy.
Изображение

Далее, вам нужно будет изменить blob shadow projector в Position и Rotation значения, для того, что бы тень от нашего персонажа падал прямо на землю.

[unity 3D] - Измените вид просмотра на 4-Split layout.
[unity 3D] - Установите в blob shadow projector’s в закладке Rotation значения на 90, 180 и 0 соответственно
[unity 3D] - Теперь используйте вид сбоку и вид сверху, чтобы переместить проектор тени непосредственно над головой Lerpz-а.
Вы может переместить проектор вверх или вниз немного, пока вас не устроит размер тени.

Создание нового слоя.(new Layer)

На этом этапе вы уже заметили, что тень также падает и на Lerpz-а сверху.
Мы не хотим, чтобы это произошло. Есть два варианта, чтобы обойти это: Разместить таким образом прожектор тени
что бы тень падала под углом к ногам Lerpz-а, или просто сказать ему, не по проектируй
на объекты в отдельных слоях. Мы будем использовать второй вариант.

[unity 3D] - Откроем Player GameObject.
[unity 3D] - Кликаем на Layer в Inspector-е.
[unity 3D] - Выбираем Add new layer.
[unity 3D] - Кликаем на первую пустую User Layer и добавляем имя noShadow

Добавление нового слоя с помощью Tag Manager
Изображение

[unity 3D] - Вернемся к Player object -у
[unity 3D] - Кликаем на “Layer” в инспекторе в выподающем списке выбираем имя слоя, noShadow.
Unity спросит желаете ли Вы применить это ко всему дочерниму объекту GameObjects: отвечаем “Change
Children Layers”.
[unity 3D] - Затем мы должны сказать BlobShadowProjector-у не проектировать на объекты в этом слое.
[unity 3D] - Топаем в Hierarchy панель, выбираем blob shadow projector ищем закладку Projector, там есть строка Ignore
Layers, выбираем слой для игнорирования. То есть наш noShadow.

Настройки Blob Shadow Projector.
Изображение

Если мы сейчас запустим игровой режим то увидим что тень падает и не попадает на нашего игрока,
но когода он включает свой мега турбо джет то тень ка кбы должна исчезнуть, но нечего подобного не происходит.
Вот это мы и устраним.
[unity 3D] - Первое, stop the game.

[unity 3D] - Now go to the Project Pane and locate the FuelCellPrefab and Health-
LifePickUpPrefab objects. You’ll find them inside the Props folder.

Select the root object of each Prefab and set its Layer to noShadow, as
shown below:

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 25 окт 2010, 09:11
Korich
Смерть и Возраждение

Платформа игры имеет риск для жизни, и Lerpz не является исключением. Мы должны гарантировать, что он теряет жизнь, если падает с платформы. Мы также должны вернуть его к жизни - возрадить в безопасном месте на уровне - часто называемый "точкой возрождения" (“respawn point”, "точки респауна"), - так он может продолжить свою "Квест".

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

Лучшее решение для этой проблемы является использование коллайдер бокса и ловить что-либо, что падает за уровень.
Мы будем делать это очень длинным и широким, что бы игрок при любых раскладах не смог бы его перепрыгдуть даже с джет-паком. Однако, Lerpz'у нужно где-то возраждаться. Но это чуть позже. Во-первых, давайте создадим коллайдер бокс:

[unity 3D] Создаем пустой GameObject.
[unity 3D] Задаем ему имя FalloutCatcher.
[unity 3D] добавляем компонент Box Collider в него.
[unity 3D] добавляем Fallout Death скрипт из Component-­>Third Person Props.
теперь раставляем параметры как на картинке:

Изображение

The Fallout Death скрипт

Этот скрипт является коротким, так как он просто делегируетвсе работы ThirdPersonStatus скрипта. (Это должно быть подключена к Lerpz'у, но мы пока не будем делать этого.)

Код для обработки триггера OnTriggerEnter (). Эта функция вызывается один раз, когда в коллайдер бокс попадает гейм-объект, такие как Lerpz или враг.

Есть три теста: Первый для игрока, другой для простого RigidBody объекта , и третий тест, чтобы проверить объект на содержание CharacterController компонента. Второе тест смотрит за всеми пропсами, таких как коробки или ящики которые падают за уровень. (У нас нет таких элементов на этом уровне, но вы можете добавить, если хотите поэкспериментировать.). Третий тест используется для врагов, обычная физика не прилагается.

Если игрок попадает в коллайдер бокс, вызывает функция FalloutDeath() в ThirdPersonStatus скрипте Lerpz'а.

Если объект попадает коллайдер бокс, то мы просто уничтожаем его, и убираем со сцены, в противном случае она будет вечно падать.

По концове мы имеем:
* Функция - Reset () - которая обеспечивает сброс всех настроек для компонента. Эта функция вызывается один раз при добавлении компонента. Она также может быть вызвана в редактор, нажав на значок шестеренки справа от имени какого-либо компонента в инспектор:

Изображение

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

Если мы запустим игру и спрыгнем с платформы, то Unity будет жаловаться на то, что он не знает, где возрадить Lerpz'а. Для этого нужно создать точку респауна..

Точка Возраждение

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

Изображение

Экземпляр точки респаун называется RespawnPrefab. (Вы найдете его в папкек Project Pane's Props.)

Этот шаблон является моделью телепорта, в сочетании с тремя системами частиц и некоторыми другими мелочами. Вот структура:

  • RSBase - сама модель: короткие цилиндрические объекты со светящимся синим кругом в центре.
  • RSSpotlight - это объект для внимания, который светит тонким голубым светом с поверхности модели, создавая иллюзию пылания.
  • Остальные объекты частиц. Скрипт возрождения крепиться к RespawnPrefab и переключается между этими системами частиц в зависимости от состояния шаблона по:
      [1]Если точка респауна неактивна, то система частиц создает эффект ярко-синего тумана. Это содержиться в RsParticlesInactive.
      [2]Если точка респауна активнf, более крупные эффекта свечения. Это содержиться в RsParticlesActive.
      Только одна точка респауна может быть активной на уровне в любой момент времени. Когда игрок касается точки респауна, объект коллайдера (устанавливается в качестве триггера) обнаруживает это и вызывает активацию точки респауна.
      [3]Остальные три системы частиц - SParticlesRepawn1, RSParticlesRepawn2 и RSParticlesRepawn3 - включаются вместе, когда игрок возраждился на точке респауна. Это идиноразовый выстрел частиц. Скрипт востанавливает игру, а затем выставляет RsParticlesActive системе частиц как только это завершено.

Шаблон содержит скрипт возрождения, который контролирует состояние точки респауна. Для того, чтобы игра знала, в какой конкретной точке респауна игрок должен быть возраждеен, когда он умирает, мы должны организовать точки респауна в иерархии главного контроллера. Давайте сделаем это сейчас:
[unity 3D] Перетащите RespawnPrefab на Scene View
[unity 3D] Позиция показана на картинке.
[unity 3D] Переименуйте в Respawn1.
[unity 3D] Повторите это еще 2 раза и давая названия Respawn2 и Respawn3 соответственно.

Следующим шагом делаем GameObject контейнер:
[unity 3D] задаем имя RespawnPoints.
[unity 3D] помещаем все шаблоны точек респауна в RespawnPoints.

Изображение

Как это работает

Когда сцена загружается, Unity вызывает Start() в каждый экземпляр скрипта возрождения, где инициализируются переменные и ссылки на другие элементы помещаются в кэш.
Ключевым механизмом является статическая переменная:
Код: Выделить всё
static var currentRespawn : Respawn;


Ключевое слово "static" означает, что он является общим для всех экземпляров сценария. Это позволяет отслеживать, какая точка респауна активна. Однако, когда начинается сцена, ни одна из точек не будут активировна, поэтому мы должны установить одну по умолчанию активной для нашей сцены. Инспектор Unity не будет отображать статические типы переменных на всех, поэтому скрипт определяет Initial Respawn параметр, который должен быть установлен для каждого экземпляра.
[unity 3D] Перетаскиваем Respawn1 в слот Initial Respawn итспектора
[unity 3D] Выставляем Initial Respawn в Respawn1 на остальных шаблонах

Примечание: это свойства не возможно установить в оригинальной шаблон.


Когда точка респауна активируется игроком, сробатывает тригер, и прошла точка деактивируется, затем устанавливается currentRespawn, для текущей точки. Функция SetActive () вызывает всплеск системы частиц и звуковые эффекты.

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

[unity 3D] Добавляем ThirdPersonStatus скрипт для Lerpz'а. Скрипт находиться в: Scripts-­>Player-­>ThirdPersonStatus.

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

Запускаем и проверяем

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 12 дек 2010, 15:16
frost
Извините,может плохо смотрел,но где пункт объясняющий создание меню в начале игры?

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 12 дек 2010, 17:13
bgeyts667
TornadoTwins вам в помощь.( 27-е и 28-е видео) :)

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 14 дек 2010, 18:23
frost
Огромноое спасибо :)

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 19 дек 2010, 00:00
GEZAR
Одна из лучших ( по доступности изложеного) статей для новичков ( которым я собственно и являюсь). Переведены не все статьи , хотя достаточно и того что есть для начала .

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 28 янв 2011, 15:02
JeanWinters

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 28 янв 2011, 15:07
Zaicheg
Вроде нормально. Ожидал увидеть очредной promt и даже забанить вас, но был приятно удивлён.

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 25 фев 2011, 05:53
dj_vla
не значительно но все же
Окончательные параметры должен выглядеть, как показано на рисунке ниже:

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 21 мар 2011, 12:36
kosty653
Вещь конечно очень нужная много чего теперь понимаю большое спасибо за урок, но я его читал для того чтобы узнать как переключаться между сценами но ничего не нашёл или не заметил если не трудно подскажите что нибудь.

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 22 мар 2011, 19:27
3xgl
Как я понял тебе нужно вот это
Синтаксис:
  1. Application.LoadLevel(номер_сцены); 

номер_сцены смотри в File=>Build Settings. Нужно в список Scenes In Build перетащить сцены.

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 24 мар 2011, 10:46
kosty653
Вот спасибо огромное век не забуду вашей доброты!
Вот теперь всё работает как надо.

Re: 3D Platform Tutorial. Перевод

СообщениеДобавлено: 26 май 2011, 15:10
Zhegloff
Я уверен что статья отличная) очень хочется познакомиться со "средой разработки" поближе, но сразу же встаёт вопрос, как двигаться дальше
по статье, если в даже в папке player нет ни ЕДИНОГО файла, а вы там просите оттуда перетащить префаб.... в самом unity в папке player тоже ничего не наблюдается... как быть? :(