【问题标题】:Serialization in Unreal vs UnityUnreal vs Unity中的序列化
【发布时间】:2017-08-29 11:19:28
【问题描述】:

Unity 中,您必须告诉引擎哪些是要序列化的参数。 不仅如此,其中一些是不可序列化的(例如字典),您需要非常清楚和仔细地指定它。

我真的很困惑,在任何书籍或官方页面中都几乎没有文档。连论坛里的问题都没有。似乎只是一个蓝图……而不是真的。

当您保存(序列化)以及进入播放模式时,我需要知道 编辑器变量状态的状态是否存储在场景中

如何创建一个组件的实例,其 UPROPERTIES 值也在编辑器中设置,但使用来自其他文件的宏创建。这些是非常动态的。那些也被存储了? (我知道每次打开场景时都会执行构造函数。我只对这种情况感兴趣......不通过代码创建实例,因为您可以设置这些值硬编码)

我正在运行测试,但会提供有关这一切的一些信息。也许 Unreal 存储了每一件东西,这就是为什么没有关于它的信息......

【问题讨论】:

  • 事实上,我在这里添加了一个指向我刚刚发布的关于 SerializeText UPROPERTY 参数的另一个问题的链接,该参数有点无证,令人惊讶的是无法编译。 stackoverflow.com/questions/45937658/… 这是我在 Unreal 上发现的唯一关于序列化的东西......
  • 在 Unity 中,默认情况下,标记为 [Serializable] 的每个类型都是(如名称所示)可序列化的。检查器可见性和序列化之间存在差异,因此 Unity(同样,默认情况下)仅显示 public[Serializable] fields。您可以用[SerializeField] 装饰private fields 以使其可见。
  • 嘿@m.rogalski,这是一个答案吗?:我问的是如何在 Unreal 中做到这一点,而不是 Unity。
  • 如果它是一个答案它不会放在 cmets 部分。我的评论只是对您关于 Unity 序列化的陈述的澄清。
  • 太酷了!谢谢!

标签: serialization properties macros unreal-engine4


【解决方案1】:

据我所知,关于 UE 序列化,标有 UPROPERTY 宏的变量受 CDO 机制的约束(或者至少是那些标记为 EditDefaultsOnly、EditAnywhere 和类似属性的允许您编辑它的编辑器中的值)。 CDO类默认对象,基本上它保存 UObject 的初始数据。

这些属性的值可以在 C++ 或编辑器中设置,然后在实际实例派生类的默认值上更改(覆盖)(也意味着蓝图类)。如果您不想存储属性的值,可以使用 Transient 标志 (c++) 或复选框 (BP)。我经常将它用于在游戏过程中找到的缓存项目。

请注意,在 C++ 构造函数中,这些属性未正确初始化。在调用PostInitProperties() 之前,它们不会被正确初始化,这是在CDO 初始化之后。

我发现阅读有关 Actor 生命周期的有用信息 UE Docs,它对我帮助很大。

【讨论】:

  • 天哪,那是金子。我从字面上阅读了所有内容,但从未阅读过这个。当您是游戏引擎的新手时,几乎不可能遵循文档。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多