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

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

СообщениеДобавлено: 24 июл 2018, 03:18
jimmm
Здравствуйте.
как правильно воспроизводить лист данных?
Синтаксис:
Используется csharp

List<PointTime> pointsTime;
int t;

void Start () {
        pointsTime = new List<PointTime> ();
}
       
void RecTrack (){
        pointsTime.Insert (0, new PointTime (camPos.transform.position, camPos.transform.rotation));
}

void FixedUpdate () {
               
        if (playTrackink) {
                PlayTrack ();
                camPos.SetActive (false);
                camPlayPos.SetActive (true);
        } else {
                camPos.SetActive (true);
                camPlayPos.SetActive (false);
        }
}
void PlayTrack (){
       
        t += 1;
        if (pointsTime.Count > 0 && t < pointsTime.Count) {
                PointTime ppp = pointsTime [t];
                camPlayPos.transform.position = ppp.position;
                camPlayPos.transform.rotation = ppp.rotation;

        } else {
                playTrackink = false;
                t = 0;
        }

}
 

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

СообщениеДобавлено: 24 июл 2018, 11:12
ilkalawson
как правильно воспроизводить лист данных?

что сделать?

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

СообщениеДобавлено: 24 июл 2018, 11:16
seaman
У него в List записаны координаты камеры покадрово и нужно по этим данным прогонять камеру.
В чем проблема не понял...

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

СообщениеДобавлено: 24 июл 2018, 12:21
jimmm
Все воспроизводится наоборот,
и есть ли лучше-правильней способ?

вот так записываю:
Синтаксис:
Используется csharp
void RecTrack (){
        pointsTime.Insert (0, new PointTime (camPos.transform.position, camPos.transform.rotation));
}
 

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

СообщениеДобавлено: 24 июл 2018, 12:33
seaman
Естественно. Вы вставляете в начало. Т.е. в конце записи в 0-м элементе будет последний записанный...

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

СообщениеДобавлено: 24 июл 2018, 13:39
1max1
А зачем insert? add ведь есть.

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

СообщениеДобавлено: 24 июл 2018, 15:22
jimmm
Спасибо понял)

А как можно в виде файлов сохранять лист, и потом его из файла же читать? Например из текстового. Но на мобильных устройствах.

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

СообщениеДобавлено: 24 июл 2018, 15:28
ilkalawson
jimmm писал(а):Спасибо понял)

А как можно в виде файлов сохранять лист, и потом его из файла же читать? Например из текстового. Но на мобильных устройствах.

переводить всё в строки с помощью JsonUtlity и сохранять в файл.

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

СообщениеДобавлено: 24 июл 2018, 20:54
getAlex
ilkalawson писал(а):переводить всё в строки с помощью JsonUtlity и сохранять в файл.


А я раньше делал через сереализацию с сохранением в бинарный вид для стандартных типов. А для не стандартных - с рефлексией всё паковал в строки, затем по первому сценарию, а потом парсил.

Если сравнить реализацию с применением утилиты, то разница разве что в типе сохранения и извлечения файла, что по сути 2-4 дополнительных метода. Не совсем понимаю для чего эта утилита.

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

СообщениеДобавлено: 24 июл 2018, 22:04
jimmm
А как-то по типа в плаерпрефс сохранять? Или xml?

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

СообщениеДобавлено: 24 июл 2018, 22:50
ilkalawson
затем по первому сценарию, а потом парсил.

жуть

Хотя я и сам такую же систему написал: свойства и поля помечал атрибутом сохранения, и через рефлексию сохранял их под ключом в виде ее имени и также обратно загружал.

А как-то по типа в плаерпрефс сохранять? Или xml?

Да как хотите, но раз вам нужно именно в файл то тогда используйте второе.

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

СообщениеДобавлено: 25 июл 2018, 04:54
1max1
jimmm писал(а):А как-то по типа в плаерпрефс сохранять? Или xml?

xml Это та же строка что и json, переводишь свой класс сохранения в строку и суешь в PlayerPrefs.SetString("Save", XML или Json);

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

СообщениеДобавлено: 26 июл 2018, 18:12
jimmm
То есть получается, это тоже самое, прописывать весь лист в огромный текст как в плеерпрефс, а потом так же его расшифровывать обратно в лист?

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

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

СообщениеДобавлено: 26 июл 2018, 18:42
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]);
    }
}
 

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

СообщениеДобавлено: 26 июл 2018, 20:35
getAlex
jimmm писал(а):То есть получается, это тоже самое, прописывать весь лист в огромный текст как в плеерпрефс, а потом так же его расшифровывать обратно в лист?

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

У префса ограниченный размер. К тому же, префс один на всё приложение, а если тебе нужны будут разные реплеи, как отдельные файлы, то префс сразу отпадает.
Сохраняй через JsonUtlity.