我正在尝试在Unity 5.6.1中创建一个遵循RPG,回合制战斗系统的游戏。为了做到这一点,我在json文件中存储了一堆变量。所有json到字符串转换都有效,并且不返回任何错误。此外,我能够使用我的脚本更改json文件。我的问题是,当脚本应该改变某些东西时,在我检查monodevelop中的脚本之前它不会这样做,因此即使它应该更新每一帧,它根本不会更新除非我在monodevelop中看它。有人能帮助我吗?
Membership.create
这是我用来将我的CombatStats.json文件转换为字符串然后是对象列表,修改其中一个对象中的一个变量,然后将对象列表转换回字符串格式它,并将其写回文件。这很有效。一切正常,除了我之前提到的更新问题。上面的所有代码都在Update()函数中。这是JSON文件:
TextAsset txtAsset = (TextAsset)Resources.Load("CombatStats", typeof(TextAsset));
string jsonString = txtAsset.text;
List<CombatStatSet> combatStatSet = JsonMapper.ToObject<List<CombatStatSet>>(jsonString);
combatStatSet [0].Strength += 1;
jsonString = JsonMapper.ToJson (combatStatSet).ToString();
jsonString = JsonFormatter.FormatJsonString(jsonString);
File.WriteAllText (Application.dataPath + "/Resources/" + "CombatStats" + ".json", jsonString);
我还想提一下,所有这一切都像Unity 5.5.1中的魅力一样。但是,它在Unity 5.6.1中停止正常工作。该变量只会在我检查monodevelop时更新,即使这样,它就像我检查它只是一帧一样。它应该是一个数字暴涨的数字,但每次检查时它只会上升一个。我的值也与屏幕上的文本框相关联,只有当我检查monodevelop时它才会改变。
答案 0 :(得分:0)
Unity编辑器仅在刷新时处理资源文件夹中的文件(丢失然后重新获得焦点),因此如果您在资源文件夹中编辑文件,Unity在刷新编辑器之前不会知道它(这是什么当你检查单声道发展时发生。)
在运行时编辑资源文件夹中的文件并没有多大意义,在大多数平台上,一旦构建应用程序,资源文件夹就不可写了。
也许您应该使用Application.persistentDataPath
代替。您可以检查Application.persistentDataPath
中是否存在json文件,如果不存在,则加载您的json文本资产。从那时起,仅对File.RaedAllText
文件夹使用File.WriteAllText
和Application.persistentDataPath
。
string jsonPath;
void Start()
{
jsonPath = Application.persistentDataPath + "/CombatStats.json";
if (!File.Exists(jsonPath))
{
File.WriteAllText(jsonPath, Resources.Load<TextAsset>("CombatStats").text);
}
}
void Update()
{
string jsonString = File.ReadAllText(jsonPath);
// update your json
File.WriteAllText(jsonPath, jsonString);
}