11 — JSON-пресети¶
🇬🇧 English | 🇺🇦 Українська
JSON дає змогу зберігати систему поза бінарним Data Asset, переглядати зміни в системі контролю версій, генерувати пресети інструментами та переносити їх між проєктами.
Data Asset → JSON¶
Відкрийте UFuzzySystemAsset і натисніть Save To JSON. Редактор:
- компілює та перевіряє поточну систему;
- показує помилки й не записує некоректний документ;
- відкриває системний діалог збереження;
- додає
.json, якщо розширення не задано; - записує канонічний документ із
SchemaVersion.
JSON → Data Asset¶
Натисніть Load Preset і виберіть .json. Завантаження відбувається у тимчасову структуру. Якщо синтаксис, схема або правила некоректні, відкритий Data Asset не змінюється. Після успіху редактор:
- замінює систему;
- оновлює Details, Variables, Inference та Compile Log;
- позначає пакет як змінений;
- створює транзакцію Undo.
Шлях до зовнішнього JSON є станом редактора, а не runtime-властивістю Data Asset. Запакована гра використовує асет і не залежить від loose-файлу.
Blueprint API¶
| Вузол | Параметри |
|---|---|
| Save Fuzzy System To Json | System, Content Relative Path, out Error |
| Load Fuzzy System From Json | Content Relative Path, out System, out Error |
Blueprint-шляхи задаються відносно каталогу Content, наприклад FuzzySystems/Driving.json. Спроба вийти за межі Content через .. відхиляється. Вбудовані пресети плагіна доступні за повним mount-шляхом, наприклад /FuzzyLogic/Demo/FuzzyDroneArena/DroneBehavior.json.
C++ API¶
#include "Serialization/FuzzySystemJson.h"
FString Json;
FText Error;
FFuzzySystemJson::ToJsonString(System, Json, Error);
FFuzzySystemJson::FromJsonString(Json, System, Error);
FFuzzySystemJson::SaveToFile(System, AbsolutePath, Error);
FFuzzySystemJson::LoadFromFile(AbsolutePath, System, Error);
FString Absolute;
FFuzzySystemJson::ResolveProjectRelativePath(
TEXT("FuzzySystems/Driving.json"), Absolute, Error);
Кожна операція повертає bool; OutError пояснює невдачу.
Схема 2¶
{
"SchemaVersion": 2,
"Settings": {
"AndOperator": "Minimum",
"OrOperator": "Maximum",
"Implication": "Clip",
"Aggregation": "Maximum",
"DefuzzificationMethod": "Centroid",
"SampleCount": 201
},
"Inputs": [
{
"Name": "Distance",
"Range": { "Min": 0, "Max": 2000 },
"DefaultValue": 1000,
"Sets": [
{
"Name": "Near",
"Function": {
"Type": "Trapezoid",
"LeftFoot": 0,
"LeftShoulder": 0,
"RightShoulder": 300,
"RightFoot": 700
}
}
]
}
],
"Outputs": [
{
"Name": "Aggression",
"Range": { "Min": 0, "Max": 1 },
"Sets": [
{
"Name": "Bold",
"Function": { "Type": "Triangle", "Left": 0.4, "Peak": 1, "Right": 1 }
}
]
}
],
"Rules": [
"IF Distance IS Near THEN Aggression IS Bold"
]
}
Поля¶
SchemaVersion— версія формату. Документ із новішою невідомою версією відхиляється.Settings— усі математичні налаштування; відсутні поля отримують типові значення.Inputs,Outputs— масиви змінних.NameіRange— обов’язкові для змінної.DefaultValue— типово0.Sets— масив множин ізNameтаFunction.Rules— масив авторського тексту правил.
Function.Type приймає Triangle, Trapezoid, Gaussian, Bell, Sigmoid, Ramp, JShape, Singleton, Constant або зареєстрований власний тип. Кожна форма підтримує "Inverted": true.
Невідомий тип, пошкоджений або обрізаний JSON завершується чистою помилкою без аварійного завершення редактора.