团结。某些字段在 Play 上会变为空

问题描述 投票:0回答:1

我指的是那些字段。

[SerializeField]
public Type gameStateType;

[SerializeField]
public IGameStateParams gameStateParams;

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

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

c# unity-game-engine unity-editor
1个回答
2
投票

这些类型(

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

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

参见 脚本序列化 -> 序列化规则

对于接口,有一种方法可以通过

[SerializeReference]
- 但前提是实现类型实际上是
UnityEngine.Object
(主要是
Component
/
MonoBehaviour
ScriptableObject

© www.soinside.com 2019 - 2024. All rights reserved.