README.md

Документация

Описание

Пакет для работы с JSON конфигами в Unity.

Работает в связке с Runner

Общая информация

При создании нового объекта типа Config, Unity автоматически заригестрирует конфиг на Runner.

Пакет работает с Serializable типами данных, например:

  • int или float
  • string
  • bool
  • array или list

Работа с пакетом

1) Создание кастомной стуктуры данных( Serializable ), пример:

[System.Serializable]
public struct Data
{
    public int number;
    public float float_number;
    public string text;
    public bool boolean;
    public int[] array;
    public List<string> list;
}

2) Создание объекта типа Config.

Пример 1( для структуры без array и/или list):

[System.Serializable]
public struct Data
{
    public int number;
    public float float_number;
    public string text;
    public bool boolean;
}

[SerializeField] private string configName = "test.json";
[SerializeField] private Data defaultData = new Data();
    
private Config<Data> config;
    
private void Start()
{
    config = new Config<Data>(configName, defaultData);
}

Пример 2( для стуктуры с array и/или list):

Если в Config используется list и/или array, то в них должен присутствовать хотя бы 1 элемент по умолчанию.

[System.Serializable]
public struct Data
{
    public int number;
    public float float_number;
    public string text;
    public bool boolean;
}

[System.Serializable]
public struct DataArray
{
    public List<Data> list;
}
    
[SerializeField] private string configName = "test.json";
[SerializeField] private List<Data> defaultData;
    
private Config<DataArray> config;
    
private void Start()
{
    DataArray dataArray = new();
    dataArray.list = defaultData;
    
    config = new Config<DataArray>(configName, dataArray);
}

3) Подписка на события Loaded, Changed, Saved:

private void OnEnable()
{
    config.Loaded += UpdateDisplayData;
    config.Changed += UpdateDisplayData;
    config.Saved += UpdateDisplayData;
}
    
private void UpdateDisplayData()
{
    timeoutField.text = config.Data.timeout.ToString();
    textWaitField.text = config.Data.textWait.ToString();
    statusField.isOn = config.Data.status;
    counterField.text = config.Data.counter.ToString();
}

4) Получение данных из конфига на момент старта программы:

var startConfig = config.GetStartStruct();

5) Получение данных из кофига:

var config = config.Data;

6) Сохранение и обновление данных:

  • Обновление:

    Для обновления конфига следует использовать Инструмент:

    image info


  • Сохранение:

    config.Save();
    

    Config не сохраняется автоматичеки!

7) Атрибуты:

  • Для добавления описания полей можно использовать атрибут [ConfigDescription], пример:

    [System.Serializable]
    public struct Data
    {
        [ConfigDescription("Описание")] public string text;
    }
    

    Таким образом вместо:

    "text": "<value>"
    

    Получится:

    "[description]text": {
        "value": "<value>",
        "description": "Описание"
    }
    
  • Для сокрытия полей можно использовать атрибут [ConfigVisibility], пример:

    [System.Serializable]
    public struct Data
    {
        [ConfigVisibility] public string text;
    }
    

    Таким образом вместо:

    "text": "<value>"
    

    Получится:

    "[visibility]text": "<value>"
    
  • Для запрещения редактирования полей можно использовать атрибут [ConfigСhangeability], пример:

    [System.Serializable]
    public struct Data
    {
        [ConfigСhangeability] public string text;
    }
    

    Таким образом вместо:

    "text": "<value>"
    

    Получится:

    "[changeability]text": "<value>"
    
  • Для запрещения редактирования полей можно использовать атрибут [ConfigSlider], пример:

    [System.Serializable]
    public struct Data
    {
        [ConfigSlider(float min, float max)] public float value;
    }
    

    Таким образом вместо:

    "value": <value>
    

    Получится:

    "[slider]value": {
        "value": <value>,
        "min": <min>,
        "max" : <max>
    }
    

Команда

Конвейеры
0 успешных
0 с ошибкой