如何使一个游戏对象的引用被用来引用一个非静态的var c# unity



我试图使一种方式,从中我可以保存枚举状态,为了做到这一点,我需要做一些参考的一些非静态字段,我使用'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将添加脚本的另一个实例到您的按钮,否则它将中断,这两种情况都不会是期望的结果

相关内容

  • 没有找到相关文章

最新更新