Unity 如何自动检测公共成员以进行序列化?

How does Unity auto-detect public members for serialization?

提问人:Adam 提问时间:11/13/2023 更新时间:11/13/2023 访问量:47

问:

我正在制作一个自定义的 C++ 游戏引擎,我想做一些类似于 Unity 做的事情,即自动序列化 MonoBehavior 类的公共成员,随后允许在编辑器中绘制成员(在我的例子中是 ImGui)。

我的问题是:Unity 实际上是如何进行这种自动检测的?似乎这个特性与反射密切相关,但至少对于我看过的 C++ 反射库,似乎你必须手动“注册”你的成员以供以后迭代。

Unity 如何在类用户无需进行任何手动注册的情况下执行此操作?

我研究了 C++ 反射库,特别是 RTTR 和 Meta。它们都需要手动注册类数据成员。

C++ unity-game-engine 反射 游戏引擎

评论

0赞 Alan Birtles 11/13/2023
我没有看过,但我的猜测是它根本没有使用 c++,它是 .net(从类名中判断),所以它只是使用普通的 .net 反射Mono
0赞 463035818_is_not_an_ai 11/13/2023
from docs: “序列化 MonoBehaviour 时,将根据 Unity 的序列化规则包含 C# 字段的值。
0赞 Eljay 11/13/2023
Unity MonoBehavior 是 C#。C# 具有反射功能,它功能强大,但也要付出代价(描述类的所有类元数据)。我怀疑这是 C++ 反射提案的症结之一。与此同时,C++ 反射是一种“自己动手”(如 RTTR 和 Meta,如您所见),并且有大量样板来检测您自己的需要反射的类。

答: 暂无答案