统一某些字段在 Play 上变为 null

问题描述

我是说那些字段。

[Serializefield]
public Type gameStateType;

[Serializefield]
public IGameStateParams gameStateParams;

我在 Editor 方法中创建了这些字段,但是,当单击 Play 时,它们变为 null。 我可以处理 Type(我的系统类型都支持存储在字典中,所以我可以使用它们的 ID 来获取 Type),但不能处理 IWhatever 实现的实例。 能解决吗?

如果没有,有没有办法在场景游戏对象中存储任何 IWhatever 实现的实例?

解决方法

这些类型(Type 和接口)不可序列化 ..所以虽然您当然可以使用编辑器脚本来传递值,但这些字段不会被序列化 => 不保存 = > 不会在运行时初始化。

当您进入 PlayMode 时,场景中的所有对象都会重新加载 => 从头开始​​反序列化 => 因为您的值从未被序列化,因此它们也不会被反序列化。

Script Serialization -> Serialization Rules