From 0ecf5e378f1ff142383fdb9a29d3b81aa3814f51 Mon Sep 17 00:00:00 2001
From: Mikhail <99481254+DCFApixels@users.noreply.github.com>
Date: Fri, 17 Apr 2026 17:17:05 +0800
Subject: [PATCH] Update readme
---
README-RU.md | 36 +++++++++++++++++++++++++++++++++++-
README-ZH.md | 38 ++++++++++++++++++++++++++++++++++++--
README.md | 35 +++++++++++++++++++++++++++++++++++
3 files changed, 106 insertions(+), 3 deletions(-)
diff --git a/README-RU.md b/README-RU.md
index e997cf7..e2651b0 100644
--- a/README-RU.md
+++ b/README-RU.md
@@ -75,7 +75,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
- [Расширение фреймворка](#расширение-фреймворка)
- [Компоненты мира](#компоненты-мира)
- [Конфиги](#конфиги)
-- [Проекты на DragonECS](#Проекты-на-DragonECS)
+- [Проекты на DragonECS](#проекты-на-dragonecs)
- [FAQ](#faq)
- [Обратная связь](#обратная-связь)
- [Лицензия](#лицензия)
@@ -912,6 +912,40 @@ var tags = typeMeta.Tags; // [MetaTags]
```
> Для автоматической генерации уникальных идентификаторов MetaID есть метод `MetaID.GenerateNewUniqueID()` и [Браузерный генератор](https://dcfapixels.github.io/DragonECS-MetaID_Generator_Online/)
+
+[MetaProxy]
+
+`[MetaProxy(typeof(MetaProxyType))]` атрибут для гибкой настройки метаданных. Он позволяет обходить ограничения обычных атрибутов (например, невозможность передавать в них неконстантные данные) и задавать метаданные программно. Кроме того, метаданные, полученные через `MetaProxy`, наследуются.
+
+API напоминает `[DebuggerTypeProxy]`, но вместо экземпляра объекта принимает тип `Type`. А класс для `MetaProxy` должен наследовать `MetaProxyBase`.
+
+Пример использования:
+
+``` c#
+// Применение атрибута
+[MetaProxy(typeof(UnityComponent<>.MetaProxy))]
+// В данном примере UnityComponent оборачивает компонент Unity
+public struct UnityComponent where T : Component
+{
+ // ...
+
+ // Реализация MetaProxyBase. MetaProxy копирует метаданные оборачиваемого типа,
+ // чтобы в инспекторе Unity отображалась его мета.
+ private class MetaProxy : MetaProxyBase
+ {
+ protected TypeMeta Meta = typeof(T).GetMeta();
+ public override string Name { get { return Meta?.Name; } }
+ public override MetaColor? Color { get { return Meta != null && Meta.IsCustomColor ? Meta.Color : null; } }
+ public override MetaGroup Group { get { return Meta?.Group; } }
+ public override MetaDescription Description { get { return Meta?.Description; } }
+ public override IEnumerable Tags { get { return Meta?.Tags; } }
+ public MetaProxy(Type type) : base(type) { }
+ }
+}
+```
+
+
+
## EcsDebug
Вспомогательный тип с набором методов для отладки и логирования. Реализован как статический класс вызывающий методы Debug-сервисов. Debug-сервисы - это посредники между EcsDebug и инструментами отладки среды. Такая реализация позволяет не изменяя отладочный код, менять его поведение или переносить проект в другие среды, достаточно только реализовать соответствующий Debug-сервис.
diff --git a/README-ZH.md b/README-ZH.md
index 9bd1737..eb72f64 100644
--- a/README-ZH.md
+++ b/README-ZH.md
@@ -72,7 +72,7 @@ DragonECS 是一个[实体组件系统](https://www.imooc.com/article/331544)框
- [集合](#集合)
- [ECS入口](#ECS入口)
- [Debug](#debug)
- - [元属性](#元属性)
+ - [Meta Attributes](#meta-attributes)
- [EcsDebug](#ecsdebug)
- [性能分析](#性能分析)
- [Define Symbols](#define-symbols)
@@ -798,7 +798,7 @@ public class EcsRoot
# Debug
该框架提供了额外的调试和日志记录工具,不依赖于环境此外,许多类型都有自己的 DebuggerProxy,以便在 IDE 中更详细地显示信息。
-## 元属性
+## Meta Attributes
默认情况下,元属性没有用处,在与引擎集成时用于指定在调试工具和编辑器中的显示方式。还可以用于生成自动文档。
``` c#
using DCFApixels.DragonECS;
@@ -837,6 +837,40 @@ var tags = typeMeta.Tags; // [MetaTags]
```
> 为了自动生成唯一的标识符 MetaID,可以使用 `MetaID.GenerateNewUniqueID()` 方法和 [浏览器生成器](https://dcfapixels.github.io/DragonECS-MetaID_Generator_Online/)。
+
+MetaProxy
+
+`[MetaProxy(typeof(MetaProxyType))]` 特性用于灵活配置元数据。它允许绕过常规特性的限制(例如无法向其传递非常量数据),并以编程方式设置元数据。此外,通过 `MetaProxy` 获得的元数据是可继承的。
+
+该 API 类似于 `[DebuggerTypeProxy]`,但不同之处在于它接受的是 `Type` 类型,而不是对象实例。`MetaProxy` 的类必须继承自 `MetaProxyBase`。
+
+使用示例:
+
+``` c#
+// 应用特性
+[MetaProxy(typeof(UnityComponent<>.MetaProxy))]
+// 在此示例中,UnityComponent 包装了一个 Unity 组件
+public struct UnityComponent where T : Component
+{
+ // ...
+
+ // MetaProxyBase 的实现。MetaProxy 复制被包装类型的元数据,
+ // 以便在 Unity 检查器中显示其元数据。
+ private class MetaProxy : MetaProxyBase
+ {
+ protected TypeMeta Meta = typeof(T).GetMeta();
+ public override string Name { get { return Meta?.Name; } }
+ public override MetaColor? Color { get { return Meta != null && Meta.IsCustomColor ? Meta.Color : null; } }
+ public override MetaGroup Group { get { return Meta?.Group; } }
+ public override MetaDescription Description { get { return Meta?.Description; } }
+ public override IEnumerable Tags { get { return Meta?.Tags; } }
+ public MetaProxy(Type type) : base(type) { }
+ }
+}
+```
+
+
+
## EcsDebug
具有调试和日志记录方法集. 实现为一个静态类,调用 DebugService 的方法. DebugService 是环境调试系统与 EcsDebug 之间的中介. 这使得可以将项目移植到其他引擎上,而无需修改项目的调试代码,只需要实现特定的 DebugService 即可。
diff --git a/README.md b/README.md
index 88fc39b..6381968 100644
--- a/README.md
+++ b/README.md
@@ -871,6 +871,41 @@ var tags = typeMeta.Tags; // [MetaTags]
```
> To simplify generate unique MetaID values, use `MetaID.GenerateNewUniqueID()` or the [Browser Generator](https://dcfapixels.github.io/DragonECS-MetaID_Generator_Online/).
+
+[MetaProxy]
+
+The `[MetaProxy(typeof(MetaProxyType))]` attribute enables flexible metadata configuration. It allows bypassing the limitations of regular attributes (for example, the inability to pass non-constant data into them) and setting metadata programmatically. Furthermore, metadata obtained via `MetaProxy` is inherited.
+
+The API resembles `[DebuggerTypeProxy]`, but instead of an object instance, it accepts a Type. The class for `MetaProxy` must inherit from `MetaProxyBase`.
+
+Usage example:
+
+``` c#
+// Applying the attribute
+[MetaProxy(typeof(UnityComponent<>.MetaProxy))]
+// In this example, UnityComponent wraps a Unity component
+public struct UnityComponent where T : Component
+{
+ // ...
+
+ // Implementation of MetaProxyBase. MetaProxy copies the metadata of the wrapped type
+ // so that its metadata is displayed in the Unity inspector.
+ private class MetaProxy : MetaProxyBase
+ {
+ protected TypeMeta Meta = typeof(T).GetMeta();
+ public override string Name { get { return Meta?.Name; } }
+ public override MetaColor? Color { get { return Meta != null && Meta.IsCustomColor ? Meta.Color : null; } }
+ public override MetaGroup Group { get { return Meta?.Group; } }
+ public override MetaDescription Description { get { return Meta?.Description; } }
+ public override IEnumerable Tags { get { return Meta?.Tags; } }
+ public MetaProxy(Type type) : base(type) { }
+ }
+}
+```
+
+
+
+
## EcsDebug
Provides methods for debugging and logging. Implemented as a static class that forwards calls to a Debug service. Debug services act as intermediaries between environment-specific debugging systems and EcsDebug, enabling portability.