我需要将值存储到可序列化的类中,而不是将其用于JsonCharacterSaver类的保存功能
首先,我只是使用unity和c#,我的基础是Web开发人员(可能会有所帮助)。
然后从将本教程应用于JSON部分(https://unity3d.com/learn/tutorials/topics/scripting/introduction-saving-and-loading)的结果中获得以下代码。
我已经阅读了有关序列化的内容以及Unity提供的页面上的相关教程的几页,但是没有找到所需的方法或解决方案。最大的问题是我不知道自己不知道的地方,也不知道应该找出什么
nb。抱歉,如果我在问题格式上做错了,这是我第二次参加,只要我记得
以下是我的保存类
using System.IO;
using UnityEngine;
public class JsonCharacterSaver : MonoBehaviour
{
public CharacterData characterData;
string dataPath;
void Start ()
{
dataPath = Path.Combine(Application.persistentDataPath, "CharacterData.txt");
}
void Update ()
{
if(Input.GetKeyDown (KeyCode.S))
SaveCharacter (characterData, dataPath);
}
static void SaveCharacter (CharacterData data, string path)
{
string jsonString = JsonUtility.ToJson (data);
using (StreamWriter streamWriter = File.CreateText (path))
{
streamWriter.Write (jsonString);
}
}
}
下面是我的addGold函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class addGold : MonoBehaviour
{
public CharacterData characterData;
public void addinggold()
{
this.characterData.golds += 20;
Debug.Log(this.characterData.golds);
}
}
以下是我的上等课程
using System;
[Serializable]
public class CharacterData
{
public int golds;
}
答案 0 :(得分:0)
好吧,您必须以某种方式在两个组件之间建立引用
我会在 JsonCharacterSaver
中进行操作using System.IO;
using UnityEngine;
public class JsonCharacterSaver : MonoBehaviour
{
// Here you reference the addGold component in the inspector (drag&drop)
public addGold addGoldReference;
string dataPath;
void Start ()
{
dataPath = Path.Combine(Application.persistentDataPath, "CharacterData.txt");
}
void Update ()
{
if(Input.GetKeyDown (KeyCode.S))
// Now here use the data from the reference instead
SaveCharacter (addGoldReference.characterData, dataPath);
}
static void SaveCharacter (CharacterData data, string path)
{
string jsonString = JsonUtility.ToJson (data);
using (StreamWriter streamWriter = File.CreateText (path))
{
streamWriter.Write (jsonString);
}
}
}
此外,对于更复杂的设置,数据等,您应该看看ScritableObjects。
巨大的优势是,您可以在这里保存您的价值,并且还具有相应的行为,例如仅在一个脚本上加载和存储所有内容。您还可以设置不同的数据并通过引用不同的ScriptableObject实例(资产)等来更改MonoBehaviours
。在您的情况下,例如
[CreateAssetMenu(fileName = "new CharacterData", menuName = "Example/CharacterDataSsset", order = 1)]
public class CharacterData
{
public int golds;
public void SaveToFile(string path)
{
string jsonString = JsonUtility.ToJson (this);
using (StreamWriter streamWriter = File.CreateText (path))
{
streamWriter.Write (jsonString);
}
}
}
现在,通过右键单击ProjectsView
(资产)并在菜单中找到Example
-> CharacterDataAsset
并在{ {1}}组件。
和仅在 JsonCharacterSaver 中使用
addGold