Введение Здравствуйте дорогие читатели, в сегодняшней статье мне хотелось бы осветить тему базовой архитектуры редактора визуальной логики для Юнити3д .
Это вторая часть серии.
Вы можете прочитать предыдущую Здесь .
Итак, о чем мы будем говорить? В основе визуального редактора лежит базовое ядро, позволяющее запускать, загружать и хранить логические данные.
В свою очередь, ядро использует, как обсуждалось в предыдущей статье, СкриптаблеОбъект , как базовый класс для работы с логическими компонентами.
Давайте подробнее рассмотрим все эти аспекты.
Статьи из серии:
→ Редактор визуальной логики для Unity3d. Часть 1
→ Редактор визуальной логики для Unity3d. Часть 3
Почему ScriptableObject?
Прежде чем приступить к разработке, я долго думал, на чем строить систему.В своей самой первой форме они были МоноПоведение , но от этой идеи пришлось отказаться, так как эти скрипты должны висеть на Игровой объект , как компоненты.
Следующим шагом стала идея использования собственного класса, не являющегося потомком UnityEngine.Объект .
Но этот вариант не прижился, хотя и был вполне рабочим, но предполагал написание собственного сериализатора, инспектора, сборщика мусора и т.д. В итоге единственным разумным решением было использование СкриптаблеОбъект , жизненный цикл которого аналогичен МоноПоведение , если создание происходит во время работы приложения через ScriptableObject.CreateInstance .
Кроме того, вопрос использования JsonUtility (хотя это уже не проблема) и инспектор Единство .
Архитектура
Ниже приведена обобщенная схема того, из чего состоит ядро.униженный .
Давайте подробнее рассмотрим каждый элемент.
Контроллер
Контроллер является основным элементом ядра, который МоноПоведение скрипт (единственный во всей системе).Класс контроллера является одноэлементным и доступен всем логическим компонентам.
Что делает этот класс:
- Хранит ссылки на объекты Единство
- Запускает логику в начале сцены
- Представляет доступ к методам для выполнения логики из внешних источников.
- Обеспечивает работу Мононуклеоз -методы в компонентах
Теги: #Разработка игр #unity #unity3d #визуальные скрипты #расширение редактора unity3dnamespace uViLEd.Core { public partial class LogicController : MonoBehaviour { private static LogicController _instance; public static LogicController Instance { get { _instance = _instance ?? FindObjectOfType<LogicController>(); return _instance; } } [Serializable] public class SceneLogicData { public string Name; public TextAsset BinaryData => _data; public string Id => _id; [SerializeField] private string _id; [SerializeField] private TextAsset _data; public SceneLogicData(string id, string name, TextAsset binaryData) { _id = id; _data = binaryData; Name = name; } } [HideInInspector] public List<SceneLogicData> SceneLogicList = new List<SceneLogicData>();
-
Повышаем Производительность Труда.
19 Oct, 24