我试图使一种方式,从中我可以保存枚举状态,为了做到这一点,我需要做一些参考的一些非静态字段,我使用'new'关键字和统一给了我一个错误,我发现我需要使用GameObject.GetComponent();
,所以我做到了。我使用的对象叫做Mybutton。我做了一个变量的类型LoadEveryThing是一个类在另一个脚本。我也引用了那个脚本,因为它是非静态的,就像这个LoadEveryThing loadEveryThing = Mybutton.GetComponent<LoadEveryThing>();
,然后它提出了一个错误,因为我的按钮是非静态的。我不能让它是静态的,因为它在检查器中是很重要的。我尝试了这个LoadEveryThing MyButton =
,我不知道我应该在这之后写什么,我甚至不知道它是否会工作。那么我该怎么做呢?
完整脚本:
using UnityEngine;
using System.IO;
public class SaveEverything : MonoBehaviour
{
// What script to save
public LoadEveryThing MyButton;
const string key = "EnumValue";
public void Save()
{
// What data to save
string saveData = MyButton.state.ToString();
// Where the data is stored
string path = Application.persistentDataPath + "\buttonstate.save";
// Writes data to file
if (File.Exists(path))
{
File.WriteAllText(path, saveData/*, saveData1, saveData2, saveData3, 5*/);
}
else
{
File.Create(path).Close();
File.WriteAllText(path, saveData/*, saveData1, saveData2, saveData3, 5*/);
}
}
public static void LoadEnum()
{
{
LoadEveryThing loadEveryThing = MyButton.AddComponent<LoadEveryThing>();
string loadString = PlayerPrefs.GetString(key);
System.Enum.TryParse(loadString, out ButtonState loadState);
loadEveryThing.state = loadState;
Debug.Log("l");
}
}
public static void SaveEnum()
{
LoadEveryThing loadEveryThing = MyButton.AddComponent<LoadEveryThing>();
string saveString = loadEveryThing.state.ToString();
PlayerPrefs.SetString(key, saveString);
PlayerPrefs.Save();
Debug.Log("s");
}
private void Save101()
{
LoadEnum();
}
public void Start()
{
}
}
public enum ButtonState
{
Buy,
Equip
}
如果有什么不清楚的,请告诉我。由于
你的SaveEnum和LoadEnum方法是静态的,所以它们存在于整个类SaveEverything的上下文中。但是属性MyButton是一个实例属性,所以静态方法不能访问它。要么这些方法也需要是实例方法,要么你需要以其他方式找到那个按钮。
例如,它可以是Save and Load的参数。或者你可以使用AssetDatabase。FindAssets来获取按钮的实例。
你也使用AddComponent在你的样例代码,但谈论使用GetComponent在你的问题。GetComponenet很好,但AddComponent将添加脚本的另一个实例到您的按钮,否则它将中断,这两种情况都不会是期望的结果