问问题
7192 次
2

我在使用 ScriptableObjects 作为 Unity 应用程序中的保存对象时遇到问题。当我尝试将值写入它们时,一切都很好,但是如果我想关闭应用程序并加载 ScriptableObject 的值,这些值将重置为它的最后一个值。这破坏了我使用它们来保存游戏值的想法。

我尝试调试将值保存到我的一个 Scriptableobjects 的整个过程,这似乎有效,每当我暂停场景时,我的 Scriptableobject 中的所有值。但是,只要我不暂停场景,Scriptableobject 就不会像看起来那样采用任何值(这里有一些关于此的示例代码)

[CreateAssetMenu(fileName = "stats1", menuName = "ScriptableObjects/Values", order = 1)]
public class ValuesSo : ScriptableObject
{
    public string Name;
}
public static class LifeValues
{
    public static string Name;
}
public class MainGameMB: MonoBehaviour
{
    //I drag and drop the Scriptableobject here so I have it referenced
    public ValuesSo Savedstats1;
    void Start()
    {
           Savedstats1.Name = LifeValues.Name;
    }
    //this is called by a Button call
    public void save()
    {
          LifeValues.Name= Savedstats1.Name;
    }
}

(这只是一些示例代码,应该是对该主题感兴趣的所有内容。如果您有任何问题或需要更多背景知识,请询问,我可以尝试提供)

4

1 回答 1

3

你需要引入序列化。
在退出游戏之前(或在“保存点”)将文件保存在磁盘上,并在游戏开始时(或在加载保存文件时)加载它。

这是 Unity 文档的链接:https ://docs.unity3d.com/Manual/JSONSerialization.html

于 2019-07-20T12:22:59.817 回答