Каждый разработчик хочет быстрее создать свою игру, но как сделать это? В этой статье рассмотрены базовые навыки, позволяющие сократить время разработки в среде Unity.
Навык #1 — Работа со структурой проекта
Для поддержания порядка в проекте требуется разобраться с его структурой. Она может быть представлена в следующем виде:
- Models — хранит все модели, используемые в проекте
- Prefabs — хранит все шаблоны моделей
- Textures — хранит все текстуры
- Materials — хранит все материалы
- Scripts — хранит все скрипты
- Sounds — хранит все звуки
- Animations — хранит все анимации
Если у Вас есть сложные объекты, например, персонаж, для него создается отдельная папка, где повторяется вышеописанная структура.
Структура папки персонажа
Другим подходом будет создание вышеописанных папок, и размещение в каждой папке частей объекта, то есть для анимации персонажа будет следующая структура.
Структура папки анимаций
Навык #2 — Работа с иерархией объектов на сцене
Для упрощения работы с наборами одинаковых объектов их можно объединять в группы, где в качестве родителя выступает пустой объект.
Это поможет легко отключить свет на всей локации или в помещении. Узнать месторасположение всех объектов.
Каждый элемент называется относительно того, что он из себя представляет, в конце добавляется префикс родительского объекта. Например, золотой слиток в пещере будет носить название «goldBar_cv1», где cv1 обозначает cave1, а дерево в лесу «tree_frt1», где frt1 обозначает forest1. Для префикса берется первая буква слова, первая буква второго слога и последняя буква слова.
Пример иерархии объектов на сцене
Навык #3 — Работа с визуальным представлением
В Unity имеется 3 основных источника света:
- Естественный свет (Directional Light) — аналог Солнца
- Точечный свет (Point Light) — аналог лампочки
- Прожектор (Spotlight) — аналог фонарика
Если есть свет, значит должен быть источник света. Например, в пещере не может быть светло, если у персонажа нет факела (для факела подойдет точечный свет).
Используйте PostProcessing для наложения эффектов.
Сцена без постобработки
Сцена с постобработкой
Навык #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. Предполагается, что Вы уже сделали развертку, нанесли текстуру или выбрали материалы.
- Расположить модель в нулевых координатах (центрировать относительно осей)
- Установить масштаб (Scale) равным единице
- Удалить лишние объекты (камера, источник света)
- Сохранить модель в формате .fbx
- Перенести файл в Unity
- Растащить по папкам — Модель к Моделям, Материал к Материалам и т.д.
- Создать префаб модели
- Работать дальше с префабами
Навык #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/
Добавить комментарий