Этот урок для начинающих взят вот тут.
Я решил его пройти сам и перевести. Т.к. урок не маленький пост этот будет постоянно редактироваться пока не закончим его окончательно.
Поправки и дополнения всегда приветствуются.
Я не буду переводить весь мануал целиком. я переведу лишь самое мясо, техническую часть.
Эта статья расширена и дополнена с незаконченного перевода тутора платформера 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]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Скриптовые имена, ресурсы, элементы меню или Свойства Инспектора (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 [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
нажмите клавишу F (focus) и вас переместит к центру Lerpz модели.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Если нажать кнопку Play, увидите Lerpz стоит во дворе тюрьмы.
На данном этапе, Lerpz не может двигаться а камера должна быть связанна с
нашим игроком.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Мы должны заставить двигаться Lerpz-а, но сначала, мы должны остановиться на нашей камере.
Позиционирование Lerpz-а на сцене.

Файлы этого тутора включает в себя несколько различных скриптов камеры, но
для целей нашего урока мы будем использовать SpringFollowCamera. Вы найдете ее в закладке Project -> Scripts -> Camera .
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Вы получите сообщение об ошибке
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Это окно выводит предупреждения, ошибки и другую отладочную информацию из вашего проекта
игры. Вы, вероятно, увидите много копий сообщения об ошибке повторяется в
журнале. Выделите одно окно и панель ниже покажет больше информации
об этой ошибке, как показано на изображении ниже.
"Нет цели" сообщение об ошибке.

Всякий раз, когда это возможно, Debug Log окно будет показывать линию на
GameObject в Hierarchy (или к Project панели если ошибка
в (Prefab)сборки или Срипте).
Ошибка типа UnassignedReferenceException - это, то что Вы будете вероятно видеть очень
часто, если Вы плохо знакомы с Unity. Это кажется страшным,(от ред- мне тоже : ) но всего навсего, это означает, то, что у скрипта
не была установлена target переменная.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Посмотрим на свойство Target, там установлено None (Transform), это свойство определяет целевой объект, который нужен для работы скрипта.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Когда вы запускаете 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 [unity 3D]](./images/smilies/unity.gif)
Third Person Controller скрипт также имеет свои собственные требования и зависимости. Наиболее важным из них является Character Controller component. К счастью, скрипт уже говорит Unity об этом, таким образом Unity добавит этот компонент для нас.
Сейчас нам нужно добавить тег к нашим Player GameObject. Это объясняется тем, что скрипты ищут
Player-a на сцене, через Теги.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
Выбор Player tag

ПРИМЕЧАНИЕ
Тэги, перечисленные в меню, указанные выше, предоставляемые Unity по умолчанию.
Мы узнаем, как создать наши собственные Tag-и и Layers-сы позже.
Теги будут использовать позже, так что вернемся к Character Controller и нашему скрипту.
![Unity 3D [unity 3D]](./images/smilies/unity.gif)
образом:
Character Controller и Third Person Controller скрипт компонент на месте.

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

![Unity 3D [unity 3D]](./images/smilies/unity.gif)
(от ред. - В мануале рекомендуют значения для 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 [unity 3D]](./images/smilies/unity.gif)
(От ред. - Упссс но я там не нашел то что нам сказали в мануале. Это лежит тут Панель 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 содержит основной набор значений передаваемый в функции. Читает значения с входного устройства и обновляет состояния чара соответствующим образом.