Хабрахабр

Базовые навыки для работы с 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 раза по имени объекта в иерархии.

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

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


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

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

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

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

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

private void OnCollisionEnter(Collision collision) }

Навык #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!"); } } }
}

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

Заключение

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

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

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть