c# - 尝试将值存储在不从 MonoBehaviour 继承的脚本中
问题描述
我正在尝试做到这一点,以便一旦您在 UI 按钮上单击“接受”,它将把任务中的所有值存储到以下脚本中:
[System.Serializable]
public class DataHolder
{
//Active Quest
public bool isActive;
public string title;
public string description;
public int goldReward;
public QuestGoal goal;
}
存储它的脚本在这里:
public class QuestGiver : MonoBehaviour
{
public Quest quest;
public DataHolder data;
public GameObject questWindow;
public Text titleText;
public Text descriptionText;
public Text goldText;
public void OpenQuestWindow()
{
Debug.Log("Quest Window Opened");
questWindow.SetActive(true);
titleText.text = quest.title;
descriptionText.text = quest.description;
goldText.text = quest.goldReward.ToString();
}
public void AcceptQuest()
{
questWindow.SetActive(false);
data.isActive = true;
data.title = quest.title;
data.description = quest.description;
data.goldReward = quest.goldReward;
}
}
以及场景中的脚本,这样当按下按钮(Tab)时,它会弹出一个 UI,显示当前任务是什么,它应该存储在第一个“DataHolder”脚本中:
public class QuestChecker : MonoBehaviour
{
DataHolder data;
public GameObject questWindow;
public Text titleText;
public Text descriptionText;
public Text goldText;
void Update()
{
if (Input.GetKeyDown(KeyCode.Tab))
{
CheckQuest();
}
}
public void CheckQuest()
{
questWindow.SetActive(true);
titleText.text = data.title;
descriptionText.text = data.description;
goldText.text = data.goldReward.ToString();
}
public void CloseQuestWindow()
{
questWindow.SetActive(false);
}
}
我希望它存储在“DataHolder”中的原因是因为我希望它存储在场景之间。我相信我的主要问题是不知道如何正确引用“DataHolder”脚本,因为 Unity 给了我警告:
Assets\Scripts\QuestChecker.cs(8,13):警告 CS0649:字段 'QuestChecker.data' 从未分配给,并且始终具有其默认值 null
任何帮助,将不胜感激。我对编程很陌生,如果这对我想要它做的事情不起作用并且需要以另一种方式做,或者如果你需要更多信息,请告诉我。谢谢
解决方案
如果您只想在场景之间存储一些数据,您可以简单地这样做:
public static class DataHolder
{
//Active Quest
public static bool isActive;
public static string title;
public static string description;
public static int goldReward;
public static QuestGoal goal;
}
然后将其作为DataHolder.isActive
等引用。请注意,您实际上并没有在任何地方“保存”数据(序列化)。SerializableAttribute 只是表明该项目可以被序列化。但是,这将在场景之间存储数据。
这是最好的方法吗?好吧,如果只是需要在场景之间存储一些简单的数据,那么这样做并没有错。它可能会很好地适应您已经编程的内容。
推荐阅读
- java - 如何在 DTO 中返回枚举?
- python - Apache Beam 流式传输管道中的侧输入产生错误“NoneType 没有属性 max_timestamp”
- java - 是否可以在 HTTP 标头中动态更改标头数据
- java - 安装失败缺少的共享库
- javascript - js中每秒刷新数据(异步函数)
- python - 在 Django 中,charfield 避免字符重复
- python - 使用 pycharm 文件从 github 克隆
- flutter - 颤振消息未发送
- python - 从文本文件中添加行并使用 for 循环打印出结果 - Python
- applescript - 将变量设置为字符串错误的一部分