Многофункциональная, расширяемая и производительная утилита рисования Gizmos для Unity. Работает как в редакторе так и в билде, а рисовать можно и в Update.
Go to file
2025-02-23 20:51:02 +08:00
Editor polishing 2025-02-23 20:51:02 +08:00
Runtime polishing 2025-02-23 20:51:02 +08:00
Samples polishing 2025-02-23 20:51:02 +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 polishing 2025-02-23 20:51:02 +08:00
package.json.meta init 2025-02-22 17:25:54 +08:00
README.md Update README.md 2025-02-23 19:34:52 +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

image

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

API для рисования заготовленные Gizmo:

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

API для рисования кастомного меша и материала:

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

//Рисования статического меша lit материалом. В режиме GPU instancing. 
DebugX.Draw(...).Mesh<IStaticMesh>(pos, rot, sc);

//Рисования статического меша статическим материалом. В режиме GPU instancing. 
DebugX.Draw(...).Mesh<IStaticMesh, IStaticMat>(pos, rot, sc);

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

// Статический меш. 
public struct SomeMesh : IStaticMesh
{
	public Mesh GetMesh() => StaticStorage.SomeMesh;
} 

// Статический материал. 
public struct SomeMesh : IStaticMesh
{
	public int GetExecutuonOrder() => 100;
	public Mesh GetMaterial() => StaticStorage.SomeMaterial;
} 

Утилита для загрузки мешей: //TODO

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

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

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

        // Подготовка данных перед рендером, тут можно выполнить дополнительные расчеты или запланировать 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;
    }
}