Многофункциональная, расширяемая и производительная утилита рисования Gizmos для Unity. Работает как в редакторе так и в билде, а рисовать можно и в Update.
Go to file
2025-02-24 11:04:18 +08:00
Editor polishing 2025-02-23 20:51:02 +08:00
Runtime polishing 2025-02-24 11:04:18 +08:00
Samples update 2025-02-24 10:59:58 +08:00
.gitattributes init 2025-02-22 17:25:54 +08:00
.gitignore init 2025-02-22 17:25:54 +08:00
DebugX.asmdef init 2025-02-22 17:25:54 +08:00
DebugX.asmdef.meta init 2025-02-22 17:25:54 +08:00
Editor.meta init 2025-02-22 17:25:54 +08:00
LICENSE init 2025-02-22 17:25:54 +08:00
LICENSE.meta init 2025-02-22 17:25:54 +08:00
package.json up version to 0.7.0 2025-02-23 21:55:33 +08:00
package.json.meta init 2025-02-22 17:25:54 +08:00
README.md Update README.md 2025-02-23 21:54:58 +08:00
README.md.meta init 2025-02-22 17:25:54 +08:00
Runtime.meta init 2025-02-22 17:25:54 +08:00
Samples.meta init 2025-02-22 17:25:54 +08:00

Unity-DebugX

vimage

Многофункциональная, расширяемая и производительная утилита рисования Gizmos для Unity. Работает как в редакторе так и в билде, а рисовать можно и в Update.

Синтаксис:

DebugX.Draw(duration, color).*Gizmo Function*(...);

image

Установка

Семантика версионирования - Открыть

Unity-пакет

Поддерживается установка в виде Unity-пакета через добавление в PackageManager или ручного добавления в Packages/manifest.json этого git-URL:

https://github.com/DCFApixels/DragonECS.git

В виде исходников

Пакет так же может быть добавлен в проект в виде исходников.

API

Синтаксис рисования заготовленных Gizmo:

DebugX.Draw(duration, color).*Gizmo Function*(...);

Рисование кастомных меша и материала:

//Рисования любого меша lit материалом. Без GPU instancing. 
DebugX.Draw(...).Mesh(mesh, pos, rot, sc);
//UnlitMesh - меш с unlit материалом
//WireMesh - меш с wireframe материалом
//Рисования статического меша lit материалом. В режиме GPU instancing. 
DebugX.Draw(...).Mesh<IStaticMesh>(pos, rot, sc);
//UnlitMesh<IStaticMesh> - меш с unlit материалом
//WireMesh<IStaticMesh> - меш с wireframe материалом
//Рисования статического меша статическим материалом. В режиме GPU instancing. 
DebugX.Draw(...).Mesh<IStaticMesh, IStaticMat>(pos, rot, sc);

Для оптимизации отрисовки используются статические данные:

// Статический меш. Обязателен для отрисовки с GPU instancing. 
public struct SomeMesh : IStaticMesh
{
    public Mesh GetMesh() => StaticStorage.SomeMesh;
}
// Статический материал. 
public struct SomeMesh : IStaticMesh
{
    // Контроль порядка выполнения рендереров. 
    public int GetExecuteOrder() => 100;
    public Mesh GetMaterial() => StaticStorage.SomeMaterial;
} 

Утилита для загрузки статических ассетов: //TODO

Настройки

Окно настроек "Tools -> DebugX -> Settings":

image

Кастомный Gizmo

Кастомная реализация Gizmo:

public readonly struct SomeGizmo : IGizmo<SomeGizmo>
{
    // Данные. 

    public SomeGizmo(/*...*/)
    {
        // Заполнение данных.
    } 
    
    public IGizmoRenderer<SomeGizmo> RegisterNewRenderer() => new Renderer();
    private class Renderer : IGizmoRenderer<SomeGizmo>
    {
        // Контроль порядка выполнения рендереров. 
        public int ExecuteOrder => 0; //можно использовать default(SomeMat).GetExecutuonOrder();
        // Флаг системе о способе оптимизации.
        // Если метод рисовки или подготовки зависят от текущей камеры, то falseиначе true.
        // Если не уверены то выбирайте false. 
        public bool IsStaticRender => false;

        // Подготовка данных перед рендером, тут можно выполнить дополнительные расчеты или запланировать Job. 
        public void Prepare(Camera camera, GizmosList<SomeGizmo> list) 
        {
            foreach (var item in list)
            {
                //... 
            }
        } 

        // Рендер, тут можно напрямую воспользоваться графическим API или добавить команду в CommandBuffer. 
        public void Render(Camera camera, GizmosList<SomeGizmo> list, CommandBuffer cb)
        {
            foreach (var item in list)
            {
                //... 
            }
        }
    }
}
// Создание метода расширения. 
public static class SomeGizmoExtensions
{
    public static DrawHandler SomeGizmo(this DrawHandler self, /*...*/) 
    {
        self.Gizmo(new SomeGizmo(/*...*/);
        return self;
    }
}