我有一个需要序列化的对象:
public class Employee {
string Name;
EmployeeData employeeData;
EmployeeSpecial employeeSpecial;
}
EmployeeData
和EmployeeSpecial
都是ScriptableObject
的子类,它们已经由游戏引擎Unity3d以不同的方式序列化并拥有自己的格式。因此,我唯一需要序列化的是对这些实例的引用。
我创建了一个用于处理此问题的查找类。
public class ScriptableObjectDictionary: ScriptableObject
{
[Serializable]
public class ScriptableObjectEntry
{
public string Key;
public ScriptableObject ScriptableObject;
public ScriptableObjectEntry(string key, ScriptableObject obj)
{
Key = key;
ScriptableObject = obj;
}
}
public List<ScriptableObjectEntry> Dictionary;
public string GetKey(ScriptableObject obj) { ... }
public ScriptableObject GetObject(string key) { ... }
...
}
在ISerializable
方法和构造函数中的Employee
类上实现GetObjectData
时,此方法非常有效。因为我在许多类中都使用了ScriptableObjects,所以对所有ScriptableObjects使用SerializationSurrogate
会更加优雅。
问题是,我是否可以为适用于所有子类的基类SerializationSurrogate
创建一个ScriptableObject
,而无需(!)在SurrogateSelector
中单独注册它们?这很重要,因为我的游戏是可扩展的,而且我不知道需要序列化的所有ScriptableObject
个孩子。