Базовые навыки для работы с Unity

от автора

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

Навык #1 — Работа со структурой проекта

Для поддержания порядка в проекте требуется разобраться с его структурой. Она может быть представлена в следующем виде:

  1. Models — хранит все модели, используемые в проекте
  2. Prefabs — хранит все шаблоны моделей
  3. Textures — хранит все текстуры
  4. Materials — хранит все материалы
  5. Scripts — хранит все скрипты
  6. Sounds — хранит все звуки
  7. Animations — хранит все анимации

Если у Вас есть сложные объекты, например, персонаж, для него создается отдельная папка, где повторяется вышеописанная структура.


Структура папки персонажа

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


Структура папки анимаций

Навык #2 — Работа с иерархией объектов на сцене

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

Это поможет легко отключить свет на всей локации или в помещении. Узнать месторасположение всех объектов.

Каждый элемент называется относительно того, что он из себя представляет, в конце добавляется префикс родительского объекта. Например, золотой слиток в пещере будет носить название «goldBar_cv1», где cv1 обозначает cave1, а дерево в лесу «tree_frt1», где frt1 обозначает forest1. Для префикса берется первая буква слова, первая буква второго слога и последняя буква слова.


Пример иерархии объектов на сцене

Навык #3 — Работа с визуальным представлением

В Unity имеется 3 основных источника света:

  1. Естественный свет (Directional Light) — аналог Солнца
  2. Точечный свет (Point Light) — аналог лампочки
  3. Прожектор (Spotlight) — аналог фонарика

Если есть свет, значит должен быть источник света. Например, в пещере не может быть светло, если у персонажа нет факела (для факела подойдет точечный свет).

Используйте PostProcessing для наложения эффектов.

image
Сцена без постобработки

image
Сцена с постобработкой

Навык #4 — Работа с камерой

Нужно найти объект на сцене? Кликните 2 раза по имени объекта в иерархии.

Хотите пролететь по сцене от 1 лица? Зажмите ПКМ и перемещайтесь клавишами WASD, на Shift ускорение.

Требуется посмотреть сцену с разных углов? Воспользуйтесь Гизмо (Gizmos).


Расположение Гизмо

Навык #5 — Работа с объектами

Хотите добавить персонажа на сцену? Добавьте компоненты RigidBody и CapsuleCollaider. RigidBody говорит движку, что к этому объекту должна применяться физика твердого тела.

Хотите проверить столкновение персонажа с объектом? Добавьте объекту компонент MeshCollaider и в скрипте персонажа в функции OnCollisionEnter проверяйте тег (tag) объекта, с которым столкнулся персонаж.

Пример реализации проверки столкновения персонажа с объектом

    private void OnCollisionEnter(Collision collision)     {         switch (collision.gameObject.tag)         {             case "Moneys":                 Destroy(collision.gameObject);                  // Do something                 break;             case "TrapSpikes":                 hitPoints -= 5.5;                  break;         }     } 

Навык #6 — Импорт моделей

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

  1. Расположить модель в нулевых координатах (центрировать относительно осей)
  2. Установить масштаб (Scale) равным единице
  3. Удалить лишние объекты (камера, источник света)
  4. Сохранить модель в формате .fbx
  5. Перенести файл в Unity
  6. Растащить по папкам — Модель к Моделям, Материал к Материалам и т.д.
  7. Создать префаб модели
  8. Работать дальше с префабами

Навык #7 — Реализация логики

Избегайте выполнения дорогостоящих операций. Примером может служить определение расстояния до объекта.

Пример с дорогостоящей операцией

using UnityEngine; using System.Collections;  public class ExampleClass : MonoBehaviour {     public Transform other;      void Example()     {         if (other)         { // Считаем квадратный корень из суммы квадратов // В данном случае квадратный корень является дорогостоящей операцией             float dist = Vector3.Distance(other.position, transform.position);              print("Distance to other: " + dist);         }     } } 

Пример более быстрой реализации

using UnityEngine; using System.Collections;  public class ExampleClass : MonoBehaviour {     public Transform other;     public float closeDistance = 5.0f;      void Update()     {         if (other)         {             Vector3 offset = other.position - transform.position;  // Считаем только сумму квадратов             float sqrLen = offset.sqrMagnitude;              // Возводим в квадрат расстояние, с которым мы сравниваем             if (sqrLen < closeDistance * closeDistance)             {                 print("The other transform is close to me!");             }         }     } } 

Прочитать больше о дорогостоящих операций можно здесь.

Заключение

Вышеперечисленные навыки позволят значительно сократить время как во время разработки, так и во время сопровождения проекта.

Если Вы считаете, что какие-то темы раскрыты поверхностно, просьба написать в комментариях о них поподробнее.


ссылка на оригинал статьи https://habr.com/ru/post/459184/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *