Работа с Gizmo Объектами.

» опубликован
Сегодня я расскажу что такое 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. Далее просто вписываем в наш код эту часть:
 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.


Просмотров: 2 700

Devion #1 - 5 лет назад 0
Статья вышла хорошая, но не совсем полной.
Например:
  1. стоит заметить, какие фигуры возможны при отрисовке через Gizmos.
  2. необходимо уточнить как функции GL-класса могут помочь (либо не актуальны совсем?) при работе с Gizmos
  3. указать способы, куда можно вводить код класса Gizmos. Тут указан случай с MonoBehaviour.OnDrawGizmos(), но еще есть
  • функция MonoBehaviour.OnDrawGizmosSelected()
  • любая функция с атрибутом [DrawGizmo()]
Надеюсь в будущем автор дополнит статью
DasBro #2 - 5 лет назад 2
Devion, Обязательно дополню