Editor | ||
Runtime | ||
Samples | ||
.gitattributes | ||
.gitignore | ||
DebugX.asmdef | ||
DebugX.asmdef.meta | ||
Editor.meta | ||
LICENSE.md | ||
LICENSE.md.meta | ||
package.json | ||
package.json.meta | ||
README-RU.md | ||
README-ZH.md | ||
README.md | ||
README.md.meta | ||
Runtime.meta | ||
Samples.meta |
Unity-DebugX
Readme Languages: | ||
Русский |
English |
中文 |
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:
DebugX.Draw(duration, color).*Gizmo Function*(...);
Table of Contents
Установка
Versioning semantics - Открыть
Unity Package
Поддерживается установка в виде Unity-пакета через добавление в PackageManager или ручного добавления в Packages/manifest.json
этого git-URL:
https://github.com/DCFApixels/Unity-DebugX
Source Code
Пакет так же может быть напрямую скопирован в папку проекта.
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;
}
Загрузка статических ассетов
Для загрузки имеется утилита DebugXUtility.LoadStaticData(...);
.
- Сначала создаем хранилище для ассетов.
public readonly struct SomeAssets
{
public readonly Mesh SomeMesh;
public readonly Material SomeMaterial;
}
- Далее необходимо создать префаб со списком ассетов. Каждый дочерний GameObject префаба рассматривается как один ассет, а его имя должно совпадать с полем в которое будет загружаться ассет. Для загрузки мешей в GameObject необходимо добавить компонент MeshFilter с ссылкой на нужный меш. Для загрузки материала нужен любой компонент унаследованный от Renderer с заданным материалом. Сам префаб должен быть расположен в папке Resources.
- После подготовки хранилища и префаба-списка можно загружать
SomeAssets assets = DebugXUtility.LoadStaticData(new SomeAssets(), "SomeAssets");
// Готово.
Пример как с этой утилитой работать можно посмотреть в исходинках в файле
DebugXAssets.cs
.
Настройки
Окно настроек "Tools -> DebugX -> Settings":
Кастомный 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 DebugX.DrawHandler SomeGizmo(this DebugX.DrawHandler self, /*...*/)
{
self.Gizmo(new SomeGizmo(/*...*/);
return self;
}
}
Define Symbols
DISABLE_DEBUGX_INBUILD
- по умолчанию Gizmo будут рисовать в сборке проекта, этот дефайн отключает рисование. Включить или выключить можно так же в окне настроек DebugX.