ну у вас как-то должна быть ссылка между двумя компонентами
Я бы сделал это в 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 .
Огромным преимуществом является то, что вы можете сохранить свое значение здесь, а также вести себя соответствующим образом, например, загружая и сохраняя все только в одном скрипте.Вы также можете иметь разные настройки данных и изменять MonoBehaviours
, ссылаясь на разные экземпляры ScriptableObject (активы) и т. Д. В вашем случае, например,
[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);
}
}
}
Теперь вы создаете новый ресурс CharacterData, щелкнув правой кнопкой мыши вProjectsView
(Активы) и в меню найдите Example
-> CharacterDataAsset
и укажите его (инспектор) в компоненте addGold
.
и в JsonCharacterSaver только do
void Update ()
{
if(Input.GetKeyDown (KeyCode.S))
// Now here use the data from the reference instead
addGoldReference.characterData.SaveToFile(dataPath);
}