问题描述
public class GeneralGameData : ScriptableObject
{
private static GeneralGameData _currentGeneralGameData;
public static GeneralGameData CurrentGeneralGameData
{
get
{
if (_currentGeneralGameData == null)
{
_currentGeneralGameData = CreateInstance<GeneralGameData>();
}
DontDestroyOnLoad(_currentGeneralGameData);
return _currentGeneralGameData;
}
}
public string GameName;
public string GameVersion;
}
这堂课没有礼物。
public class GeneralGameDataMenuItem : EditorWindow
{
[MenuItem("CoreMaker/GeneralGameData")]
private static void _generalGameData()
{
Getwindow<GeneralGameDataMenuItem>("GeneralGameData");
}
void OnGUI()
{
GeneralGameData.CurrentGeneralGameData.GameName = EditorGUILayout.TextField("GameName",GeneralGameData.CurrentGeneralGameData.GameName);
GeneralGameData.CurrentGeneralGameData.GameVersion = EditorGUILayout.TextField("GameVersion",GeneralGameData.CurrentGeneralGameData.GameVersion);
EditorUtility.SetDirty(GeneralGameData.CurrentGeneralGameData);
}
}
问题在于,在我点击播放或重新启动单位后,它不会保存我的更改。 任何解决方案?
解决方法
ScriptableObject
打算另存为资产。在[CreateAssetMenu(menuName = "MyGame/GeneralGameData")]
类声明上方添加ScriptableObject
行,然后在项目窗格中右键单击,单击Create > MyGame > GeneralGameData
。填写您需要的所有字段。任何需要引用它的脚本都可以添加一个GeneralGameData
类型的公共字段,并将该资产添加到检查器中。
这是基于Nailuj29s答案的固定代码,但是您不需要通过拥有公共字段来引用它,而是只需要使用GeneralGameData.CurrentGeneralGameData
。
公共类GeneralGameData:ScriptableObject { 私有静态GeneralGameData _currentGeneralGameData;
public static GeneralGameData CurrentGeneralGameData
{
get
{
if (_currentGeneralGameData == null)
{
if (AssetDatabase.FindAssets("GeneralGameData",new []{ "Assets/CoreMaker" }).Length != 1)
{
_currentGeneralGameData = CreateInstance<GeneralGameData>();
if (!AssetDatabase.IsValidFolder("Assets/CoreMaker"))
{
AssetDatabase.CreateFolder("Assets","CoreMaker");
}
AssetDatabase.CreateAsset(_currentGeneralGameData,"Assets/CoreMaker/GeneralGameData.asset");
}
}
_currentGeneralGameData = AssetDatabase.LoadAssetAtPath<GeneralGameData>("Assets/CoreMaker/GeneralGameData.asset");
return _currentGeneralGameData;
}
}
public string GameName;
public string GameVersion;
}
请记住,当您引用GeneralGameData.CurrentGeneralGameData
时,它将创建和资产,如果删除该资产,则会丢失数据。