Сегодня я расскажу что такое Gizmo объекты,для чего они нужны,как с ними работать и как они могут нам пригодится.
Начнем с того,что Gizmo объект-это меш,который создается в сцене,но не отображается в игре. Выглядит он так:
Геометрия меша создается с помощью встроенных методов в библиотеки UnityEngine. Цвет материала можно указать любой,на скриншоте видно что я объявил поле типа Color и выбрал зеленый цвет,а также увеличил значение в альфа канале(Это для того,что бы объект был виден). Теперь возникает вопрос:"А зачем этот объект нужен?"-,на самом деле нет какого-то основного предназначения для этого объекта,но лично я использую его для создания системы триггером,своим методом светофора. Есть три цвета: Зеленый,Желтый,Красный. Триггеры зеленого цвета активируют основные фичи игры,желтого цвета активируют побочные(второстепенные) фичи,красного цвета активируют различные мелочи(если хоррор,то скримеры или звуки).
Теперь приступим к созданию такого объекта. Вот примитивный пример:
using UnityEngine;
using System.Collections;
public class GizmObject : MonoBehaviour {
public Color colorGizmoObject; //Цвет заливки Gizmo объекта
void OnDrawGizmos() //Встроенный метод,необходим для работы с Gizmos объектами и их отрисовки
{
Gizmos.color = colorGizmoObject; //Назначаем цвет нашему объекту
//Рисуем Gizmos Куб.Он принимает два параметра. 1.Позиция Объекта 2.Размер Объекта
Gizmos.DrawCube(new Vector3(transform.position.x, transform.position.y, transform.position.z), transform.localScale);
}
}
Далее создаем обычный куб,удаляем MeshRenderer и MeshFilter,оставляем BoxCollider и кидаем на этот объект наш код. Потом настраиваем цвет и теперь у нас получилось тоже самое что на скриншоте 1.
Теперь я думаю нет особых затруднений сделать из этого триггер(кстати вы могли увидеть что альфа канал я не ставил на максимум,это сделано для того чтобы видеть сквозь них другие объекты). Первым делом ставим галочку в BoxCollider в поле Is Trigger. Далее просто вписываем в наш код эту часть:
Теперь я думаю нет особых затруднений сделать из этого триггер(кстати вы могли увидеть что альфа канал я не ставил на максимум,это сделано для того чтобы видеть сквозь них другие объекты). Первым делом ставим галочку в BoxCollider в поле Is Trigger. Далее просто вписываем в наш код эту часть:
void OnTriggerEnter(Collider other)
{
if(other.gameObject.name == nameObject)
{
print("It's Work!");
}
}
Имя nameObject - это лишь поле типа string,чтобы мы могли вписать любое имя объекта(Очень удобно если нам нужно сделать несколько проверок на разные объекты с разным именем). Просто впишите public string nameObject; .Вот Самый примитивный пример использования Gizmos объекта как триггер(его очень удобно расставлять по локации). Кстати если вы работаете в 2D режиме,просто поставьте 0 в Z-координате в методе DrawCube и у триггера Z-ось в размере поставьте на 0.
В данном методе можно рисовать не только куб,но и сферу,фрустум,линию,меш и другое. И у каждого естественно свои параметры. Вот примитивный код линии:
using UnityEngine;
using System.Collections;
public class GizmObject : MonoBehaviour {
public Color colorGizmoObject; //Цвет заливки Gizmo объекта
void OnDrawGizmos() //Встроенный метод,необходим для работы с Gizmos объектами и их отрисовки
{
Gizmos.color = colorGizmoObject; //Назначаем цвет нашему объекту
Gizmos.DrawLine(new Vector3(0, 0, 0), new Vector3(5, 5, 0)); //Указываем координаты точки А и координаты точки Б
}
}
Вот что получилось:
На этом все. Может напишу статью еще об одной очень крутой вещи как Handles.
Например:
Ред. ehnaton