@Slabada

Как сделать объект, содержащий пары ключ-значение в Unity?

здравствуйте, мне нужно сделать объект, содержащий пары ключ-значение для того, чтобы сделать сохранения в яндекс игры.


player.setData(data, flush) — сохраняет данные пользователя. Максимальный размер данных не должен превышать 200 KБ.

data — object — объект, содержащий пары ключ-значение.
flush — boolean — определяет очередность отправки данных. При значении «true» данные будут отправлены на сервер немедленно; «false» (значение по умолчанию) — запрос на отправку данных будет поставлен в очередь.


Как мне это сделать, не подскажите ? я новичок, не особо понимаю как это сделать.
сама документация
  • Вопрос задан
  • 371 просмотр
Решения вопроса 1
@NoNameDeveloper
Unity Developer
Вариант 1: На сервере вы можете отправить JSON (обычный string) (В твоем случае не рекомендую). Но он будет весить по больше в зависимости конечно же от количество полей. В юнити есть JsonUtility который позволит вам работать с данным форматом. У вас должен быть класс только для данных

public class Data {
  public int field1 = 1;
  public bool field2 = true;
  public string field3 = "test"
}


На выходе:
{
  "field1": 1,
  "field2": true,
  "field3": "test"
}


Вариант 2: Вы можете использовать BinaryWriter/BinaryReader и отправить на сервере byte[]. Файлы будут весить меньше. Но сохранять и загружать значения будете в ручную:

using UnityEngine;

public class Data : MonoBehaviour
{
    public int field1 = 1;
    public bool field2 = true;
    public string field3 = "test";

    // Methods

    public byte[] Save()
    {
    	MemoryStream stream = new MemoryStream();
        BinaryWriter writer = new BinaryWriter(stream);

        // В каком порядке записываются данные, в таком и нжно будет читать!
        writer.Write(field1); // int
        writer.Write(field2); // bool
        writer.Write(field3); // string

        // Output - byte[] который используется для отправки с помощью WWWForm.
        return stream.ToArray();
    }

    public void Load(byte[] data)
    {
        MemoryStream stream = new MemoryStream(data);
        using (BinaryReader reader = new BinaryReader(stream))
        {
            // Читаем данные.
            field1 = reader.ReadInt32();
            field2 = reader.ReadBoolean();
            field3 = reader.ReadString();
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы