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


Интересные статьи

Интересные статьи

Одной из самых сложных вещей за последние восемь месяцев перехода на удаленную работу стало то, как компании измеряют продуктивность своих сотрудников. Раньше менеджеры м...
Всем привет! Не так давно на работе в рамках тестирования нового бизнес-процесса мне понадобилась возможность авторизации под разными пользователями. Переход в соответствующий р...
С ЭВМ (слово компьютер тогда не было в ходу) я столкнулся в году 1977, просто курс такой был на мехмате. Fortran IV, коды М-20, Algol-60, PL/1, сразу после универа попал в программисты (системные...
Мое текущее понимание: 1) KVM KVM (Kernel-based Virtual Machine) – гипервизор (VMM – Virtual Machine Manager), работающий в виде модуля на ОС Linux. Гипервизор нужен для того, чтобы зап...
Эта статья посвящена одному из способов сделать в 1с-Битрикс форму в всплывающем окне. Достоинства метода: - можно использовать любые формы 1с-Битрикс, которые выводятся компонентом. Например, добавле...