From 2e565c901279f932c69b5e0b1e0ab7fcd0ca02bf Mon Sep 17 00:00:00 2001
From: DCFApixels <99481254+DCFApixels@users.noreply.github.com>
Date: Thu, 6 Mar 2025 11:12:41 +0800
Subject: [PATCH] update
---
README-RU.md | 252 +++++++++++++++++++++++++++++++++++++++++++++++++++
README-ZH.md | 199 ++++++++++++++++++++++++++++++++++++++++
README.md | 58 +++++++++---
3 files changed, 496 insertions(+), 13 deletions(-)
create mode 100644 README-RU.md
create mode 100644 README-ZH.md
diff --git a/README-RU.md b/README-RU.md
new file mode 100644
index 0000000..e33f2ed
--- /dev/null
+++ b/README-RU.md
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+# Unity-DebugX
+
+
+
+
+
+Многофункциональная, расширяемая и производительная утилита рисования Gizmos для Unity. Работает как в редакторе так и в билде, а рисовать можно как в OnDrawGizmos так и в Update. Поддерживается HDRP, URP и BRP, но в BRP не поддерживается отрисовка в коллбеках OnDrawGizmos.
+
+Синтаксис:
+```c#
+DebugX.Draw(duration, color).*Gizmo Function*(...);
+```
+
+
+
+
+
+
+## Оглавление
+- [Установка](#установка)
+- [API](#api)
+- [Настройки](#настройки)
+- [Кастомный Gizmo](#кастомный-gizmo)
+- [Define Symbols](#define-symbols)
+- [Загрузка статических ассетов](#загрузка-статических-ассетов)
+
+
+
+
+# Установка
+Семантика версионирования - [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#file-dcfapixels_versioning_ru-md)
+### Unity-пакет
+Поддерживается установка в виде Unity-пакета через добавление [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json` этого git-URL:
+```
+https://github.com/DCFApixels/Unity-DebugX
+```
+### В виде исходников
+Пакет так же может быть напрямую скопирован в папку проекта.
+
+
+
+# API
+
+Синтаксис рисования заготовленных Gizmo:
+```c#
+DebugX.Draw(duration, color).*Gizmo Function*(...);
+```
+
+Среди заготовленных Gizmo есть разные вариации примитивов, линий, точек и текст. Пример некоторых Gizmo:
+```c#
+// Рисует обычную линию аналогично Debug.DrawLine(...).
+// Показываться линия будет в течении секунды и красного цвета.
+DebugX.Draw(1, Color.red).Line(startPoint, endPoint);
+```
+```c#
+// Рисует куб, но всего один кадр и желтого цвета.
+DebugX.Draw(Color.yellow).Cube(center, rotation, size);
+```
+```c#
+// Рисует сферу.
+DebugX.Draw(Color.yellow).Cube(center, radius);
+```
+```c#
+// Рисует точку, точка имеет screen space размер.
+DebugX.Draw(Color.yellow).Dot(startPoint, endPoint);
+```
+```c#
+// Рисует текст. Текст так же может показываться в течении заданного времени.
+DebugX.Draw(1, Color.red).Text(center, text);
+// Для расширенной настройки отображения используется DebugXTextSettings.
+DebugX.Draw(Color.yellow).Text(center, text, DebugXTextSettings.Default.SetBackgroundColor(Color.black));
+```
+
+На случай если не хватает заготовленных примитивов есть методы для рисования кастомных меша и материала:
+```c#
+//Рисования любого меша lit материалом. Без GPU instancing.
+DebugX.Draw(...).Mesh(mesh, pos, rot, sc);
+//UnlitMesh - меш с unlit материалом
+//WireMesh - меш с wireframe материалом
+```
+```c#
+//Рисования статического меша lit материалом. В режиме GPU instancing.
+DebugX.Draw(...).Mesh(pos, rot, sc);
+//UnlitMesh - меш с unlit материалом
+//WireMesh - меш с wireframe материалом
+```
+```c#
+//Рисования статического меша статическим материалом. В режиме GPU instancing.
+DebugX.Draw(...).Mesh(pos, rot, sc);
+```
+
+Для оптимизации отрисовки используются статические данные:
+```c#
+// Статический меш. Обязателен для отрисовки с GPU instancing.
+public struct SomeMesh : IStaticMesh
+{
+ public Mesh GetMesh() => StaticStorage.SomeMesh;
+}
+```
+```c#
+// Статический материал.
+public struct SomeMesh : IStaticMesh
+{
+ // Контроль порядка выполнения отрисовки.
+ public int GetExecuteOrder() => 100;
+ public Mesh GetMaterial() => StaticStorage.SomeMaterial;
+}
+```
+> В примере StaticStorage это условная реализация статического хранилища ассетов. Так как в Unity статические данные нельзя заполнять через инспектор, решение этой проблемы описано в главе [Загрузка статических ассетов](#загрузка-статических-ассетов).
+
+
+
+# Настройки
+Окно настроек "Tools -> DebugX -> Settings":
+
+
+
+
+
+# Кастомный Gizmo
+Самый простой вариант это создание метода расширения который комбинирует заготовленные гизмо, например:
+```c#
+public static class SomeGizmoExtensions
+{
+ public static DebugX.DrawHandler Distance(this DebugX.DrawHandler self, Vector3 start, Vector3 end)
+ {
+ // Рисуем линию.
+ self.Line(start, end);
+ // Рисуем текст посреди линии который показывает длину линии.
+ self.Text(Vector3.Lerp(start, end, 0.5f), Vector3.Distance(start, end), DebugXTextSettings.Default.SetAnchor(TextAnchor.UpperCenter));
+ // для поддержки Method Chaining синтаксиса.
+ return self;
+ }
+}
+```
+> Так же можно использовать методы `Mesh` для создания методов рисования других примитивов.
+
+Расширенная реализация Gizmo, на случай нехватки встроенных методов отрисовки:
+```c#
+public readonly struct SomeGizmo : IGizmo
+{
+ // Данные.
+
+ public SomeGizmo(/*...*/)
+ {
+ // Заполнение данных.
+ }
+
+ public IGizmoRenderer RegisterNewRenderer() => new Renderer();
+ private class Renderer : IGizmoRenderer
+ {
+ // Контроль порядка выполнения рендереров.
+ public int ExecuteOrder => 0; //можно использовать default(SomeMat).GetExecutuonOrder();
+ // Флаг системе о способе оптимизации.
+ // Если метод рисовки или подготовки зависят от текущей камеры, то false,иначе true.
+ // Если не уверены то выбирайте false.
+ public bool IsStaticRender => false;
+
+ // Подготовка данных перед рендером, тут можно выполнить дополнительные расчеты или запланировать 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 DebugX.DrawHandler SomeGizmo(this DebugX.DrawHandler self, /*...*/)
+ {
+ self.Gizmo(new SomeGizmo(/*...*/);
+ return self;
+ }
+}
+```
+
+
+
+# Define Symbols
++ `DISABLE_DEBUGX_INBUILD` - по умолчанию Gizmo будут рисовать в сборке проекта, этот дефайн отключает рисование. Включить или выключить можно так же в окне настроек DebugX.
+
+
+
+# Загрузка статических ассетов
+Для загрузки имеется утилита `DebugXUtility.LoadStaticData(...);`.
+
+1) Сначала создаем хранилище для ассетов.
+```c#
+public readonly struct SomeAssets
+{
+ public readonly Mesh SomeMesh;
+ public readonly Material SomeMaterial;
+}
+```
+2) Далее необходимо создать префаб со списком ассетов. Каждый дочерний GameObject префаба рассматривается как один ассет, а его имя должно совпадать с полем в которое будет загружаться ассет. Для загрузки мешей в GameObject необходимо добавить компонент MeshFilter с ссылкой на нужный меш. Для загрузки материала нужен любой компонент унаследованный от Renderer с заданным материалом. Сам префаб должен быть расположен в папке Resources.
+
+
+
+3) После подготовки хранилища и префаба-списка можно загружать
+```c#
+SomeAssets assets = DebugXUtility.LoadStaticData(new SomeAssets(), "SomeAssets");
+// Готово.
+```
+> Пример как с этой утилитой работать можно посмотреть в исходинках в файле `DebugXAssets.cs`.
\ No newline at end of file
diff --git a/README-ZH.md b/README-ZH.md
new file mode 100644
index 0000000..7a2268a
--- /dev/null
+++ b/README-ZH.md
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+# Unity-DebugX
+
+
+
+
+
+Многофункциональная, расширяемая и производительная утилита рисования Gizmos для Unity. Работает как в редакторе так и в билде, а рисовать можно и в Update. Поддерживается HDRP, URP и BRP, но в BRP не поддерживается отрисовка в коллбеках OnDrawGizmos.
+
+Синтаксис:
+```c#
+DebugX.Draw(duration, color).*Gizmo Function*(...);
+```
+
+
+
+
+
+## Оглавление
+- [Установка](#установка)
+- [API](#api)
+- [Загрузка статических ассетов](#загрузка-статических-ассетов)
+- [Настройки](#настройки)
+- [Кастомный Gizmo](#кастомный-gizmo)
+- [Define Symbols](#define-symbols)
+
+# Установка
+Семантика версионирования - [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#file-dcfapixels_versioning_ru-md)
+### Unity-пакет
+Поддерживается установка в виде Unity-пакета через добавление [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json` этого git-URL:
+```
+https://github.com/DCFApixels/Unity-DebugX
+```
+### В виде исходников
+Пакет так же может быть напрямую скопирован в папку проекта.
+
+
+
+# API
+
+Синтаксис рисования заготовленных Gizmo:
+```c#
+DebugX.Draw(duration, color).*Gizmo Function*(...);
+```
+
+Рисование кастомных меша и материала:
+```c#
+//Рисования любого меша lit материалом. Без GPU instancing.
+DebugX.Draw(...).Mesh(mesh, pos, rot, sc);
+//UnlitMesh - меш с unlit материалом
+//WireMesh - меш с wireframe материалом
+```
+```c#
+//Рисования статического меша lit материалом. В режиме GPU instancing.
+DebugX.Draw(...).Mesh(pos, rot, sc);
+//UnlitMesh - меш с unlit материалом
+//WireMesh - меш с wireframe материалом
+```
+```c#
+//Рисования статического меша статическим материалом. В режиме GPU instancing.
+DebugX.Draw(...).Mesh(pos, rot, sc);
+```
+
+Для оптимизации отрисовки используются статические данные:
+```c#
+// Статический меш. Обязателен для отрисовки с GPU instancing.
+public struct SomeMesh : IStaticMesh
+{
+ public Mesh GetMesh() => StaticStorage.SomeMesh;
+}
+```
+```c#
+// Статический материал.
+public struct SomeMesh : IStaticMesh
+{
+ // Контроль порядка выполнения рендереров.
+ public int GetExecuteOrder() => 100;
+ public Mesh GetMaterial() => StaticStorage.SomeMaterial;
+}
+```
+
+# Загрузка статических ассетов
+Для загрузки имеется утилита `DebugXUtility.LoadStaticData(...);`.
+
+1) Сначала создаем хранилище для ассетов.
+```c#
+public readonly struct SomeAssets
+{
+ public readonly Mesh SomeMesh;
+ public readonly Material SomeMaterial;
+}
+```
+2) Далее необходимо создать префаб со списком ассетов. Каждый дочерний GameObject префаба рассматривается как один ассет, а его имя должно совпадать с полем в которое будет загружаться ассет. Для загрузки мешей в GameObject необходимо добавить компонент MeshFilter с ссылкой на нужный меш. Для загрузки материала нужен любой компонент унаследованный от Renderer с заданным материалом. Сам префаб должен быть расположен в папке Resources.
+
+
+
+3) После подготовки хранилища и префаба-списка можно загружать
+```c#
+SomeAssets assets = DebugXUtility.LoadStaticData(new SomeAssets(), "SomeAssets");
+// Готово.
+```
+> Пример как с этой утилитой работать можно посмотреть в исходинках в файле `DebugXAssets.cs`.
+
+# Настройки
+Окно настроек "Tools -> DebugX -> Settings":
+
+
+
+# Кастомный Gizmo
+
+Кастомная реализация Gizmo:
+```c#
+public readonly struct SomeGizmo : IGizmo
+{
+ // Данные.
+
+ public SomeGizmo(/*...*/)
+ {
+ // Заполнение данных.
+ }
+
+ public IGizmoRenderer RegisterNewRenderer() => new Renderer();
+ private class Renderer : IGizmoRenderer
+ {
+ // Контроль порядка выполнения рендереров.
+ public int ExecuteOrder => 0; //можно использовать default(SomeMat).GetExecutuonOrder();
+ // Флаг системе о способе оптимизации.
+ // Если метод рисовки или подготовки зависят от текущей камеры, то false,иначе true.
+ // Если не уверены то выбирайте false.
+ public bool IsStaticRender => false;
+
+ // Подготовка данных перед рендером, тут можно выполнить дополнительные расчеты или запланировать 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 DebugX.DrawHandler SomeGizmo(this DebugX.DrawHandler self, /*...*/)
+ {
+ self.Gizmo(new SomeGizmo(/*...*/);
+ return self;
+ }
+}
+```
+
+
+# Define Symbols
++ `DISABLE_DEBUGX_INBUILD` - по умолчанию Gizmo будут рисовать в сборке проекта, этот дефайн отключает рисование. Включить или выключить можно так же в окне настроек DebugX.
diff --git a/README.md b/README.md
index 17c1457..6bed853 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,3 @@
-# Unity-DebugX
-

@@ -7,33 +5,67 @@
-Многофункциональная, расширяемая и производительная утилита рисования Gizmos для Unity. Работает как в редакторе так и в билде, а рисовать можно и в Update. Поддерживается HDRP, URP и BRP, но в BRP не поддерживается отрисовка в коллбеках OnDrawGizmos.
-Синтаксис:
+# Unity-DebugX
+
+
+
+
+
+A multifunctional, extensible, and high-performance Gizmos drawing utility for Unity. It works both in the editor and in the build, and drawing can be done both in OnDrawGizmos and in Update. HDRP, URP, and BRP are supported, but drawing in the OnDrawGizmos callbacks is not supported in BRP.
+
+Syntax:
```c#
DebugX.Draw(duration, color).*Gizmo Function*(...);
```
+

-## Оглавление
-- [Установка](#установка)
+## Table of Contents
+- [Installation](#Installation)
- [API](#api)
-- [Загрузка статических ассетов](#загрузка-статических-ассетов)
-- [Настройки](#настройки)
-- [Кастомный Gizmo](#кастомный-gizmo)
+- [Loading Static Assets](#Loading-Static-Assets)
+- [Settings](#Settings)
+- [Custom Gizmo](#Custom-gizmo)
- [Define Symbols](#define-symbols)
# Установка
-Семантика версионирования - [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#file-dcfapixels_versioning_ru-md)
-### Unity-пакет
+Versioning semantics - [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#file-dcfapixels_versioning_ru-md)
+### Unity Package
Поддерживается установка в виде Unity-пакета через добавление [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json` этого git-URL:
```
https://github.com/DCFApixels/Unity-DebugX
```
-### В виде исходников
-Пакет так же может быть добавлен в проект в виде исходников.
+### Source Code
+Пакет так же может быть напрямую скопирован в папку проекта.