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

в 20:37, , рубрики: 3d graphics, game development, game engine, Gamedev, unity3d, unity3dstudent, Анимация и 3D графика, перевод, уроки, метки: , , , , , , ,

Добрый день. Предлагаю свой вариант перевода уроков по 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 (Упругий).

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

Теперь нажав 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

Автор: DisaDisa

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js