diff --git a/README.md b/README.md index 1ca7a64..36cb5fe 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,92 @@ # Unity-DebugX ![image](https://github.com/user-attachments/assets/fb3edbce-9164-4ad7-a7a2-85748edf58e0) + +Многофункциональный, расширяемый и высоко производительный инструмент для рисования Gizmos для Unity. + +API для рисования заготовленные Gizmo: +```c# +DebugX.Draw(duration, color).*Gizmo Function*(...); +``` + +API для рисования кастомного меша и материала: +```c# +//Рисования любого меша lit материалом. Без GPU instancing. +DebugX.Draw(...).Mesh(mesh, pos, rot, sc); +//UnlitMesh - меш с unlit материалом +//WireMesh - меш с wireframe материалом + +//Рисования статического меша lit материалом. В режиме GPU instancing. +DebugX.Draw(...).Mesh(pos, rot, sc); + +//Рисования статического меша статическим материалом. В режиме GPU instancing. +DebugX.Draw(...).Mesh(pos, rot, sc); +``` + +Для оптимизации отрисовки используются статические данные: +```c# +// Статический меш. +public struct SomeMesh : IStaticMesh +{ + public Mesh GetMesh() => StaticStorage.SomeMesh; +} + +// Статический материал. +public struct SomeMesh : IStaticMesh +{ + public int GetExecutuonOrder() => 100; + public Mesh GetMaterial() => StaticStorage.SomeMaterial; +} +``` +Утилита для загрузки мешей: //TODO + +Кастомная реализация Gizmo: +```c# +public readonly struct SomeGizmo : IGizmo +{ + // Данные. + + public SomeGizmo(/*...*/) + { + //... + } + + public IGizmoRenderer RegisterNewRenderer() => new Renderer(); + private class Renderer : IGizmoRenderer + { + // Контроль порядка выполнения рендереров. + public int ExecuteOrder => //... + // Флаг системе о способе оптимизации. Если метод рисовки или подготовки зависят от текущей камеры, то false,иначе true. Если не уверены то выбирайте false. + public bool IsStaticRender => //... + + // Подготовка данных перед рендером, тут можно выполнить дополнительные расчеты или запланировать Job. + public void Prepare(Camera camera, GizmosList list) + { + foreach (var item in list) + { + //... + } + } + + // Рендер, тут можно напрямую воспользоваться графическим API или добавить команду в CommandBuffer. + public void Render(Camera camera, GizmosList list, CommandBuffer cb) + { + foreach (var item in list) + { + //... + } + } + } +} +``` +```c# +// Создание метода расширения. +public static class SomeGizmoExtensions +{ + public static DrawHandler SomeGizmo(this DrawHandler self, /*...*/) + { + self.Gizmo(new SomeGizmo( /*...*/); + return self; + } +} +``` \ No newline at end of file