Unity3d / Уроки от Unity 3D Student

:

Предлагаю свой вариант перевода уроков по Unity3d от www.unity3dstudent.com

Введение.

Данная статья представляет из себя первый набор базовых (из раздела Beginner) уроков. Уроки в основном нацелены на изучения скриптинга и использования компонентов.
Поэтому предполагается, что с основами работы в GUI Unity вы слегка знакомы. Если нет, изучите вводный раздел на этом же сайте.
Уроки достаточно ясные и короткие, так что трудностей в процессе их изучения должно возникать минимум.

PS: А хорошо это или плохо — вопрос достаточно сложный.

В некоторых местах уроков есть минимальные косметические изменения, не затрагивающие основную суть.

Базовый Урок 00 — Добавления массы / гравитации к твердому телу.




В уроке рассказывается как добавлять гравитацию / массу к объекту с помощью компонента Rigidbody (твердое тело).

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

Создайте проект или новую сцену в готовом проекте (предварительно подключив Standard Assets packages). Добавьте куб ( GameObject->Create Other->Cube), плоскость ( GameObject->Create Other->Plane) и точечный источник света ( GameObject->Create Other->Point Light). Расположите их как указанно на картинке ниже.

image_0_0

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

image_0_1

Теперь добавим компонент Rigidbody (твердое тело). Он расположен в меню Component->Physics. Выберете наш куб и добавьте этот компонент к нему.

image_0_2

Если нажать на Play, вы увидите как куб падает на плоскость под действием силы тяжести. Давайте немного изменим физические свойства нашего куба. Снова выберите куб. В Inspector View вы можете увидеть компонент Box Collider, одним из параметров которого является Material (по умолчанию значение None(Physics Material)). Кликните правой кнопкой мыши на это значение и выскочит окно выбора физического материала. Если вы создавали проект, подключив стандартный набор ресурсов ( Standard Assets) вы увидите несколько стандартных физических материалов. Выберете Bouncy (Упругий).

Теперь нажав Play вы увидите, как после падения куб начнет отталкивается от поверхности.

Ссылка на оригинальный урок

Дополнительные материалы:

Раздел о компоненте Rigidbody из официального справочника о компонентах Unity3d

Справка по классу Rigidbody из официального справочника о скриптах Unity3d

Базовый Урок 01 — Основы обнаружения столкновений.




В уроке рассказывается как обнаружить столкновения (collisions) между объектами используя скрипты.

Создайте сцену как в предыдущем уроке или загрузите уже имеющуюся. Добавьте к ней еще один куб, растяните его по горизонтали в 5-6ть раз и по вертикали в 2а раза. Расположите его как показано на рисунке ниже.

image_1_0

В этом уроке важны названия объектов. Назовите плоскость Floor, а куб представляющий стену Wall (Ваш К.О.)

В Project View нажмите на Create и выберете С# Script. Назовите его boxdrop. Дважды кликнув на скрипт вы откроете его в вашем редакторе скриптов (как правило, по умолчанию это MonoDevelop. У автора статьи это Visual Studio 2010 под Windows или Textmate под MacOs).

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

//Важно! Названия основного класса всегда должно совпадать с названием файла скрипта
public class boxdrop : MonoBehaviour {  

По умолчанию Unity создает каркас для C# скрипта. Удалите из тела класса boxdrop все содержимое и замените следующим:

// Метод вызываемый при столкновении объекта
void OnCollisionEnter() {    
  Debug.Log("Hit Something");  // Передаем сообщение в консоль Unity 
}

Функция OnCollisionEnter определяет столкновение объекта с другими объектами. А статический метод Log класса Debug пишет сообщение в консоль Unity. После сохранения скрипта, добавьте его как компонент для падающего куба.
Теперь если вы нажмете Play, в момент когда куб коснется пола консоль выдаст соответствующее сообщение. Открыть окно консоли можно комбинацией ctrl + shift + c в Windows или cmd + shift + c в MacOs. Последнее консольное сообщение отображается в статус баре проекта (внизу окна).

image_1_1

Причем сообщение будет выдаваться при каждом столкновении.
Для того, чтобы понять с каким именно объектом столкнулся наш куб, мы будем брать значение параметра класса Collision, которое будет принимать метод OnCollisionEnter:

// Теперь метод принимает объект класса Collision, с которым происходит столкновение
void OnCollisionEnter(Collision myCollision) {
  // определение столкновения с двумя разноименными объектами
  if (myCollision.gameObject.name == "Floor") {  
      // Обращаемся к имени объекта с которым столкнулись 
      Debug.Log("Hit the floor");
    }
    else if (myCollision.gameObject.name == "Wall") {
      Debug.Log("Hit the wall");
    }
  }
}

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

image_1_2

Ссылка на оригинальный урок

Дополнительные материалы:

Справка по функции OnCollisionEnter() из официального справочника о скриптах Unity3d

Раздел о компоненте Collider из официального справочника о компонентах Unity3d:

Базовый Урок 02 -Основы ввода




В Уроке рассказываются основы ввода с использованием скриптов.

В Unity существует множество способов для ввода текстовых данных. Мы рассмотрим простейший случай, в котором нажатие на клавишу пробел вызовет сообщение в консоли Unity. В отличии от предыдущих уроков, в этой сцене присутствует только камера и пустой игровой объект ( GameObject->Create Empty).

image_2_0

Добавим C# скрипт и назовем его keyPress. Откройте скрипт. В теле класса keyPress вы увидете пустую функцию Update(). Она вызывается каждый кадр:

// Функция Update() вызывается единожды в каждом кадре
void Update () { 
}

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

// Если нажата клавиша, соответствующая значению "Jump"(по умолчанию это пробел)
if (Input.GetButtonUp("Jump")) {
  Debug.Log("We Have Hit the Space Bar"); // Выводим сообщение в консоль
}

Сохраним файл и добавим этот скрипт к пустому объекту (перетащив скрипт на объект или же выделив объект и перетащив скрипт в Inspector View). Давайте выясним, что такое «Jump». Идем в Edit->Project Settings->Input.

image_2_1

В Inspectore открылся Input Manager. Разверните пункт Axes. Если выбрать Jump, видно что его имя как раз и представляет строка «Jump», а значение переменной Positive Button есть space. Про остальные параметры вы можете прочитать в справочнике Unity (ссылка в конце урока).

image_2_2
Запустите сцену, перейдите в закладку Game View и нажмите пробел, после чего в консоли (и внизу окна проекта) увидите соответствующие сообщение.

image_2_3

Аналогичный результат можно получить если заменить строку

if (Input.GetButtonUp("Jump")) {

на
if (Input.GetKeyUp(KeyCode.Space)) {

Ссылка на оригинальный урок
Дополнительные материалы:

Справка о классе Input из официального справочника о скриптах Unity3d

Раздел о компоненте Input из официального справочника о компонентах Unity3d

Базовый Урок 03 -Префабы




В Уроке рассказывается как создавать префабы, и для чего они созданы.

Преваб (сборная конструкция) — это объект, содержащийся в вашем проекте, его можно клонировать и создавать множество его экземпляров, причем все экземпляры при копировании будут содержать те же компоненты. Создайте или загрузите сцену из Базового Урока 1. У нас на сцене присутствует куб, который падает и выдает сообщение в консоль при столкновении с объектами. Что если мы хотим создать множество таких же кубов (с уже добавленными компонентами)?
Создадим префаб, с помощью Create->Prefab в Project View.

image_3_0

В итоге получим серую иконку с названием New Prefab.

image_3_1

Переименуем ее в «BouncyBox». Теперь нам осталось лишь перетащить все что требуется в наш префаб. То есть Cube.

image_3_2

Цвет иконки поменялся на синий и теперь, если вы выделите наш префаб, в Inspector View вы увидите что он имеет те же параметры, что были и у объекта Cube.
Если вы хотите создавать экземпляры префаба, то вам требуется перетащить его в сцену.

image_3_3

Нажмите Play и увидите, что добавленный куб ведет себя точно так же, как и оригинальный.
Префабы нужны, если вам требуется создавать много однообразных объектов, которые содержат множество компонентов. К примеру, если вы разрабатываете игру и у вам нужно добавать много врагов у которых одинаковое поведение, внешний вид и пр.

image_3_4

Ссылка на оригинальный урок

Дополнительные материалы:

Раздел о Префабах из официального мануала Unity3d