Идея синтаксического генератора (editor+dom+code)
Добавлено: 12 сен 2017, 11:45
Всем привет.
Начал набрасывать скрипт для генерации дерева DOM (+статические ссылки для ресурсов) и для сцены юнити.
Хотел проверить у сообщества идею, собрать до кучи минусы и плюсы.
И так, на входе сцена любой сложности, скрипт собирает данные объектов, строит дерево классов и префабов, ресурсов, пример:
пример использования:
Плюсы:
- избавляет от необходимости помнить устройство сцены и ресурсов
- позволяет отказаться от поиска объектов через строковые именования или жестких ссылок на объекты через поля и свойства
- следит за списком компонентов объекта, автоматически добавляет их в дерево
- следит за переименованием ресурсов, подменяет их в коде доступа к дереву
Минусы:
- код привязан к одной сцене
- кардинально отличается от обычного workflow в среде unity
- отслеживание перемещений объекта внутри дерева возможно нерешаемая задача
Ближайший аналог - JQuery для JavaScript.
Начал набрасывать скрипт для генерации дерева DOM (+статические ссылки для ресурсов) и для сцены юнити.
Хотел проверить у сообщества идею, собрать до кучи минусы и плюсы.
И так, на входе сцена любой сложности, скрипт собирает данные объектов, строит дерево классов и префабов, ресурсов, пример:
Синтаксис:
Используется csharp
public class QScene // root уровень сцены
{
static public QNode MainCamera { get; }
static public QNode MainCanvas { get; }
static public QNode DirectionalLight { get; }
static public QNode EventSystem { get; }
static public QNode GameField { get; }
}
public class MainCanvas : QNode // один из объектов сцены
{
static public QNode OkButton { get; }
static public QNode LayoutGroup { get; }
static public QNode FormController { get; }
}
{
static public QNode MainCamera { get; }
static public QNode MainCanvas { get; }
static public QNode DirectionalLight { get; }
static public QNode EventSystem { get; }
static public QNode GameField { get; }
}
public class MainCanvas : QNode // один из объектов сцены
{
static public QNode OkButton { get; }
static public QNode LayoutGroup { get; }
static public QNode FormController { get; }
}
пример использования:
Синтаксис:
Используется csharp
// обращение к статическому объекту
QScene.MainCanvas.OkButton.Button.OnClick.AddListener(OnOkClick);
QScene.Player.AudioSource.play();
// обращение к динамическому объекту
QScene.get(Prefabs.Enemy)[0].EnemyController.life++;
// Добавление компонента или GameObject
QScene.add(Prefabs.Player, DieAnimController, true);
QScene.MainCanvas.OkButton.Button.OnClick.AddListener(OnOkClick);
QScene.Player.AudioSource.play();
// обращение к динамическому объекту
QScene.get(Prefabs.Enemy)[0].EnemyController.life++;
// Добавление компонента или GameObject
QScene.add(Prefabs.Player, DieAnimController, true);
Плюсы:
- избавляет от необходимости помнить устройство сцены и ресурсов
- позволяет отказаться от поиска объектов через строковые именования или жестких ссылок на объекты через поля и свойства
- следит за списком компонентов объекта, автоматически добавляет их в дерево
- следит за переименованием ресурсов, подменяет их в коде доступа к дереву
Минусы:
- код привязан к одной сцене
- кардинально отличается от обычного workflow в среде unity
- отслеживание перемещений объекта внутри дерева возможно нерешаемая задача
Ближайший аналог - JQuery для JavaScript.