Компоненты
Удаленная отрисовка Azure использует шаблон проектирования Entity-Component-System (Система компонентов cущностей). Сущности представляют собой данные о расположении и иерархической композиции объектов, а компоненты отвечают за реализацию поведения.
Наиболее часто используемые типы компонентов — это mesh components, которые добавляют сетки в конвейер отрисовки. Аналогичным образом компоненты освещения используются для добавления освещения, а компоненты сечения — для сечения открытых сеток.
Все эти компоненты используют преобразование (изменение расположения, поворота, масштабирование) сущности, к которой они присоединены, в качестве опорной точки.
Работа с компонентами
Вы можете легко программно добавлять и удалять компоненты и оперировать ими.
// create a point light component
RenderingSession session = GetCurrentlyConnectedSession();
PointLightComponent lightComponent = session.Connection.CreateComponent(ObjectType.PointLightComponent, ownerEntity) as PointLightComponent;
lightComponent.Color = new Color4Ub(255, 150, 20, 255);
lightComponent.Intensity = 11;
// ...
// destroy the component
lightComponent.Destroy();
lightComponent = null;
// create a point light component
ApiHandle<RenderingSession> session = GetCurrentlyConnectedSession();
ApiHandle<PointLightComponent> lightComponent = session->Connection()->CreateComponent(ObjectType::PointLightComponent, ownerEntity)->as<PointLightComponent>();
// ...
// destroy the component
lightComponent->Destroy();
lightComponent = nullptr;
Компонент прикрепляется к сущности во время создания. После этого его нельзя передать другой сущности. Компоненты явным образом удаляются с помощью функции Component.Destroy()
или это происходит автоматически при уничтожении сущности-владельца компонента.
За раз к сущности можно добавить только один экземпляр каждого типа компонента.
Особенности при работе с Unity
Интеграция Unity предоставляет дополнительные функции расширения для взаимодействия с компонентами. Дополнительную информацию см. в статье Игровые объекты и компоненты Unity.
Документация по API
- C# ComponentBase
- C# RenderingConnection.CreateComponent()
- C# Entity.FindComponentOfType()
- C++ ComponentBase
- C++ RenderingConnection::CreateComponent()
- C++ Entity::FindComponentOfType()