Страница 2 из 2

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 28 июл 2018, 01:09
jimmm
1max1 писал(а):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections.Generic;

[System.Serializable]
class Track
{
    public List<Vector3> positions = new List<Vector3>();
    public List<Quaternion> rotations = new List<Quaternion>();
    public List<float> times = new List<float>();

    public void Add(Vector3 position, Quaternion rotation, float time)
    {
        positions.Add(position);
        rotations.Add(rotation);
        times.Add(time);
    }
}

class test : MonoBehaviour
{
    void Start()
    {
        Track t = new Track();

        t.Add(Vector3.zero, Quaternion.identity, 0.0f);
        t.Add(Vector3.zero, Quaternion.identity, 10.0f);
        t.Add(Vector3.zero, Quaternion.identity, 20.0f);

        var save = JsonUtility.ToJson(t);

        PlayerPrefs.SetString("Save", save);

        var load = JsonUtility.FromJson<Track>(PlayerPrefs.GetString("Save"));

        print(load.times[2]);
    }
}
 


Спасибо большое!!
Но чет я так и не смог применить правильно в свой скрипт, ничего не происходит на мобильном устройстве.
вот такой костыль я сделал:
Синтаксис:
Используется csharp
using UnityEngine;

public class PointTime{

        public Vector3 position;
        public Vector3 scale;
        public Quaternion rotation;
        public string nname;
        public float time;

        public PointTime (Vector3 pos, Quaternion rot, Vector3 scl, float tt){
       
                position = pos;
                rotation = rot;
                scale = scl;
                time = tt;
        }
}
 


Синтаксис:
Используется csharp

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TrackCam : MonoBehaviour {


        public GameObject camPos;
        public GameObject camPlayPos;
        public RecScreen rec;

        List<PointTime> pointsTime;
        List<PointTime> pointsLocTime;

        int tt = 0;

        void Start () {
                pointsTime = new List<PointTime> ();
                pointsLocTime = new List<PointTime> ();
        }


        void FixedUpdate () {
                if (rec.recording) {
                        RecTrack ();
                } else {
                        SaveTrack ();
                }
                if (playTrackink) {
                        PlayTrack ();
                        camPos.SetActive (false);
                        camPlayPos.SetActive (true);
                } else {
                        camPos.SetActive (true);
                        camPlayPos.SetActive (false);
                }
        }

        void RecTrack (){
                pointsTime.Add ( new PointTime (camPos.transform.position, camPos.transform.rotation, camPos.transform.localScale, +1f));
        }

        class Track
        {
                public List<PointTime> po = new List<PointTime>();
        }

        void SaveTrack(){
                var save = JsonUtility.ToJson(pointsTime);
                PlayerPrefs.SetString("Save", save);
                pointsTime.Clear ();
                LoadSaveTr ();
        }

        void LoadSaveTr(){
                var load = JsonUtility.FromJson<Track>(PlayerPrefs.GetString("Save"));
                pointsTime = load.po;
        }

        void PlayTrack (){
                tt += 1;
                if (pointsTime.Count > 0 && tt < pointsTime.Count) {
                        PointTime ppp = pointsTime [tt];

                        camPlayPos.transform.position = ppp.position;
                        camPlayPos.transform.rotation = ppp.rotation;
                        camPlayPos.transform.localScale = ppp.scale;

                }

        }
}
 



А как можно обратно перевести сохраненный лист, в обычный лист?

И что можете сказать про ArrayPrefs2, удобниее ли это использовать?

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 28 июл 2018, 02:02
Anonymyx
Насколько я помню, JsonUtility не сериализует лист как корневой объект. Его надо обернуть в класс, как в коде выше.
Создать экземпляр класса Track, проинициализироввать лист, и этот экземпляр передать в .ToJson();

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 28 июл 2018, 10:22
jimmm
Anonymyx писал(а):Насколько я помню, JsonUtility не сериализует лист как корневой объект. Его надо обернуть в класс, как в коде выше.
Создать экземпляр класса Track, проинициализироввать лист, и этот экземпляр передать в .ToJson();

А в чем разница, сериализиррвать лист вектора или как у меня лист с несколькими значениями?

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

public class PointTime{

        public Vector3 position;
        public Vector3 scale;
        public Quaternion rotation;
        public string nname;
        public float time;

        public PointTime (Vector3 pos, Quaternion rot, Vector3 scl, float tt){
       
                position = pos;
                rotation = rot;
                scale = scl;
                time = tt;
        }
}
 


Синтаксис:
Используется csharp

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TrackCam : MonoBehaviour {


        public GameObject camPos;
        public GameObject camPlayPos;
        public RecScreen rec;

        List<PointTime> pointsTime;
        List<PointTime> pointsLocTime;

        int tt = 0;

        void Start () {
                pointsTime = new List<PointTime> ();
                pointsLocTime = new List<PointTime> ();
        }


        void FixedUpdate () {
                if (rec.recording) {
                        RecTrack ();
                } else {
                        SaveTrack ();
                }
                if (playTrackink) {
                        PlayTrack ();
                        camPos.SetActive (false);
                        camPlayPos.SetActive (true);
                } else {
                        camPos.SetActive (true);
                        camPlayPos.SetActive (false);
                }
        }

        void RecTrack (){
                pointsTime.Add ( new PointTime (camPos.transform.position, camPos.transform.rotation, camPos.transform.localScale, +1f));
        }

        class Track
        {
                public List<PointTime> po = new List<PointTime>();
        }

        void SaveTrack(){
                var save = JsonUtility.ToJson(pointsTime);
                PlayerPrefs.SetString("Save", save);
                pointsTime.Clear ();
                LoadSaveTr ();
        }

        void LoadSaveTr(){
                var load = JsonUtility.FromJson<Track>(PlayerPrefs.GetString("Save"));
                pointsTime = load.po;
        }

        void PlayTrack (){
                tt += 1;
                if (pointsTime.Count > 0 && tt < pointsTime.Count) {
                        PointTime ppp = pointsTime [tt];

                        camPlayPos.transform.position = ppp.position;
                        camPlayPos.transform.rotation = ppp.rotation;
                        camPlayPos.transform.localScale = ppp.scale;

                }

        }
}
 

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 28 июл 2018, 10:30
getAlex
jimmm писал(а):А в чем разница, сериализиррвать лист вектора или как у меня лист с несколькими значениями?

В том что вектор уже сам по себе сериализован самим юнити, а ваши значения в листе нет. Все поля вашего класса, которые изначально не сериализованы, также должны быть сериализованы.
Если вы сериализуете класс А, а в нём есть поле класса В, в котором поле класса С, то вам нужно сериализовать все эти три класса.

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 30 июл 2018, 01:13
jimmm
Спасибо большое за попомощь!!

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 30 июл 2018, 15:16
jimmm
А как можно сохраненные данные потом сохранить в iCloud Drive на ios?
Если можно вообще

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 03 авг 2018, 03:41
jimmm
А как удалять сохраненные данные json? Просто удаление PlayerPrefs?

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 03 авг 2018, 06:48
1max1

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 03 авг 2018, 12:22
jimmm


Я просто думал что playerPrefs созраняют только имя создаваемого json файла.
Думал что если просто удалить playerprefs, то сам json файл останется?

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 03 авг 2018, 16:10
1max1
Я просто думал что playerPrefs созраняют только имя создаваемого json файла.

Какое имя? Какой файл? PlayerPrefs не сохраняет файлы (по крайней мере на пк)
Думал что если просто удалить playerprefs, то сам json файл останется?

Естественно, ты пытаешься связать несвязуемое, плеерпрефс не имеет отношения к тем файлам что ты сохраняешь вручную [-x
Json это просто строка, которая содержит информацию о переменных и их значениях, эту строку ты можешь сохранить либо на диск в виде файла через File.WriteAllText, либо сохранить в реестр через плеерпрефс, соответственно, удалять файл нужно через File.Delete, а если ты сохранил через плеерпрефс, то через PlayerPrefs.DeleteKey или PlayerPrefs.DeleteAll(чтобы удалить вообще всё).

Re: Как воспроизвести лист данных?

СообщениеДобавлено: 03 авг 2018, 18:41
jimmm
Понял, спасибо!