我创建了一个如下所示的可编写脚本的对象:
[CreateAssetMenu(fileName = "PlayerPrefsDefault", menuName = "Base/PlayerPrefsDefault", order = 1)]
public class PlayerPrefsDefaults : ScriptableObject
{
public List<PlayerPrefsDefaultInt> playerPrefsDefaultInts = new List<PlayerPrefsDefaultInt>();
[Serializable]
public class PlayerPrefsDefault<DataType>
{
public string key;
public DataType value;
}
[Serializable]
public class PlayerPrefsDefaultInt : PlayerPrefsDefault<int> { }
}
到目前为止有效。但是,这不是我内心向往的美学。
因此,第1步,为什么我不能或者宁愿我该如何在我的ScriptableObject中拥有它(当然,也暴露给检查器):
public List<PlayerPrefsDefault<int>> playerPrefsDefaultInts;
自然,这意味着使用多个列表,每种数据类型一个。
因此,第2步,我实际上更愿意定义:
[Serializable]
public class PlayerPrefsDefault
{
public System.Type type;
public string key;
public object value;
}
我希望可以将任意值(int,float,bool,字符串,UnityEngine.Vector3等)分配给值变量(并使检查器GUI适应使用类型进行的选择,我知道如何为此)
最终,通常来说:如何使用ScriptableObjects尽可能通用?