Помогите с созданием json

Программирование на Юнити.

Помогите с созданием json

Сообщение maratnarimanyan 05 май 2020, 13:00

Добрый день, я начинающий разработчик игр и столкнулся с проблемой. При создании файла json на пк все отображается и создается.Но после компиляции апк и запуске на андроиде не создается файл. Я предполагаю что что-то связано с директорией path = Path.Combine(Application.persistentDataPath + "Save.json");
Вот код создания json
Синтаксис:
Используется csharp
using UnityEngine;
using System.IO;
using System;

public class SaveGame : MonoBehaviour
{
    public GameObject settings;
    public string path;
    private SaveData sv = new SaveData();
    private void Start()
    {
        settings = Resources.Load("Money") as GameObject;

        path = Path.Combine(Application.persistentDataPath + "Save.json");

        if (File.Exists(path))
        {
            sv = JsonUtility.FromJson<SaveData>(File.ReadAllText(path));
        }
    }
    private void Update()
    {
        sv.Money_ammount = settings.GetComponent<Money>().Money_ammount;
        sv.RadiotionScore = settings.GetComponent<Resource>().RadiotionScore;
        sv.WaterScore = settings.GetComponent<Resource>().WaterScore;
        sv.EatScore = settings.GetComponent<Resource>().EatScore;
        sv.MedicineScore = settings.GetComponent<Resource>().MedicineScore;
        sv.Weigth = settings.GetComponent<Add_drop>().Weigth;
        sv.DamageScore = settings.GetComponent<Damage>().DamageScore;
        sv.Location_now = settings.GetComponent<map>().Location_now.text;
    }


    private void OnApplicationQuit()
    {
        File.WriteAllText(path, JsonUtility.ToJson(sv));
        settings.GetComponent<Money>().Money_ammount = sv.Money_ammount;
        settings.GetComponent<Resource>().RadiotionScore = sv.RadiotionScore;
        settings.GetComponent<Resource>().WaterScore = sv.WaterScore;
        settings.GetComponent<Resource>().EatScore = sv.EatScore;
        settings.GetComponent<Resource>().MedicineScore = sv.MedicineScore;
        settings.GetComponent<Add_drop>().Weigth = sv.Weigth;
        settings.GetComponent<Damage>().DamageScore = sv.DamageScore;
        settings.GetComponent<map>().Location_now.text = sv.Location_now;

    }
}
[Serializable]
public class SaveData
{
   
    public int Money_ammount;
    public float RadiotionScore;
    public float WaterScore;
    public float EatScore;
    public float MedicineScore;
    public float Weigth;
    public int DamageScore;
    public string Location_now;
}
maratnarimanyan
UNец
 
Сообщения: 5
Зарегистрирован: 05 май 2020, 12:55

Re: Помогите с созданием json

Сообщение 1max1 05 май 2020, 13:13

Синтаксис:
Используется csharp
path = Path.Combine(Application.persistentDataPath + "/Save.json");
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Помогите с созданием json

Сообщение maratnarimanyan 05 май 2020, 13:41

1max1 писал(а):
Синтаксис:
Используется csharp
path = Path.Combine(Application.persistentDataPath + "/Save.json");

Исправил теперь файл создается в другой папке, но на андроиде проблема все также не решается. То есть когда я запускаю процесс в редакторе файл сохраняется на пк, и также нормально загружается. Но на андроиде не создается сам файл Save.json
maratnarimanyan
UNец
 
Сообщения: 5
Зарегистрирован: 05 май 2020, 12:55

Re: Помогите с созданием json

Сообщение 1max1 05 май 2020, 13:48

Может OnApplicationQuit не срабатывает? Раскидай логи, проверь.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Помогите с созданием json

Сообщение maratnarimanyan 05 май 2020, 13:54

1max1 писал(а):Может OnApplicationQuit не срабатывает? Раскидай логи, проверь.

Проверял, логи работают. Может нужно как-то по-другому написать путь создания файла мне сказали, что порыскать в WebURLRequest и создать файл через StreamingAssets. Вот я пока не особо понимаю почему не создается именно на телефоне когда апк собран, на компе работает нормально все.
maratnarimanyan
UNец
 
Сообщения: 5
Зарегистрирован: 05 май 2020, 12:55

Re: Помогите с созданием json

Сообщение 1max1 05 май 2020, 14:01

Ну, вот тут https://answers.unity.com/questions/111 ... droid.html говорят что еще галочку надо поставить "PlayerSettings->OtherSettings->WriteAccess to External (SDCard)". Может нет прав на запись.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Помогите с созданием json

Сообщение maratnarimanyan 05 май 2020, 14:11

1max1 писал(а):Ну, вот тут https://answers.unity.com/questions/111 ... droid.html говорят что еще галочку надо поставить "PlayerSettings->OtherSettings->WriteAccess to External (SDCard)". Может нет прав на запись.

Да права на запись тоже есть, даже перед входом спрашивает можно ли использовать и я нажимаю да=). Странная ситуация складывается, но я попробую еще пару дней поискать и использовать новые функции.Вот картинка https://prnt.sc/sb8d9f
maratnarimanyan
UNец
 
Сообщения: 5
Зарегистрирован: 05 май 2020, 12:55

Re: Помогите с созданием json

Сообщение maratnarimanyan 06 май 2020, 09:03

Если кому интересно будет я решил проблему. Она заключалась в этой функции public void OnApplicationPause(bool pause). Потому что андроид не понимает OnApplicationQuit.

Вот скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.IO;
using System;

public class SaveGame : MonoBehaviour
{
    private GameObject settings;
   
    private SaveData sv = new SaveData();
    public void Awake()
    {
       
        settings = Resources.Load("Money") as GameObject;

        if (File.Exists(Path.Combine(Application.persistentDataPath + "/Save.json")))
        {
            sv = JsonUtility.FromJson<SaveData>(File.ReadAllText(Path.Combine(Application.persistentDataPath + "/Save.json")));
        }
        Debug.Log("Start: ");
    }

    public void Start()
    {
        settings.GetComponent<Money>().Money_ammount = sv.Money_ammount;
        settings.GetComponent<Resource>().RadiotionScore = sv.RadiotionScore;
        settings.GetComponent<Resource>().WaterScore = sv.WaterScore;
        settings.GetComponent<Resource>().EatScore = sv.EatScore;
        settings.GetComponent<Resource>().MedicineScore = sv.MedicineScore;
        settings.GetComponent<Add_drop>().Weigth = sv.Weigth;
        settings.GetComponent<Damage>().DamageScore = sv.DamageScore;
        settings.GetComponent<map>().Location_now.text = sv.Location_now;
    }
    private void Update()
    {
        sv.Money_ammount = settings.GetComponent<Money>().Money_ammount;
        sv.RadiotionScore = settings.GetComponent<Resource>().RadiotionScore;
        sv.WaterScore = settings.GetComponent<Resource>().WaterScore;
        sv.EatScore = settings.GetComponent<Resource>().EatScore;
        sv.MedicineScore = settings.GetComponent<Resource>().MedicineScore;
        sv.Weigth = settings.GetComponent<Add_drop>().Weigth;
        sv.DamageScore = settings.GetComponent<Damage>().DamageScore;
        sv.Location_now = settings.GetComponent<map>().Location_now.text;
    }
   

    public void OnApplicationPause(bool pause)
    {
        if (pause)
        {
            Debug.Log("isApplicationPause" + pause);
            File.WriteAllText(Path.Combine(Application.persistentDataPath + "/Save.json"), JsonUtility.ToJson(sv));
           
        }
    }

   
}

[Serializable]
public class SaveData
{

    public int Money_ammount = 1000;
    public float RadiotionScore = 0;
    public float WaterScore = 100;
    public float EatScore = 100;
    public float MedicineScore = 100;
    public float Weigth = 0;
    public int DamageScore = 3;
    public string Location_now = "Кордон";
}
maratnarimanyan
UNец
 
Сообщения: 5
Зарегистрирован: 05 май 2020, 12:55


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8