Unreal Tournament: Actor-компоненты

Программирование в UDK.

Использование Актор-компонентов

ActorComponent и PrimitiveComponent

ActorComponent это класс объекта, который может быть установлен в мире.
PrimitiveComponent это тот ActorComponent, который отвечает за рендеринг или столкновение объектов.

Добавление компонентов

Пример:
class Actor extends Object;

var const array<ActorComponent>   Components;

defaultproperties
{
   Begin Object Class=SpriteComponent Name=Sprite
      Sprite=S_Actor
      HiddenGame=True
   End Object
   Components.Add(Sprite)
}

Изменение компонентов

Пример:
class Trigger extends Actor;

defaultproperties
{
   Begin Object Name=Sprite
      Sprite=S_Trigger
   End Object
}

Удаление компонентов

Пример:
class StaticMeshActor extends Actor;

defaultproperties
{
   Components.Remove(Sprite)
   …
}
Прототип компонента Sprite по умолчанию не ссылается на свойства класса StaticMeshActor

Шаблоны компонентов

Шаблоны используются для объявления по умолчанию компонентов актор-класса. Шаблон это именованный объект, который содержит стандартные параметры для компонента стандартной ссылки свойства класса (Вот такое будет краткое определение).
Шаблоны наследуются подклассами класса, в котором они были объявлены. В каждый таком подклассе можно изменить набор индивидуальных свойств, унаследованных от шаблона.

Создание шаблона

Шаблон компонента, объявленный по умолчанию, будут выглядеть так:
Begin Object Class=SpriteComponent Name=Sprite
   Sprite=Texture2D'EngineResources.S_Actor'
   HiddenGame=True
   AlwaysLoadOnClient=False
   AlwaysLoadOnServer=False
End Object
Естественно это с учетом свойств класса

Установка и подключение шаблона

Пример:
 Begin Object Class=SpriteComponent Name=Sprite
   // Здесь присваиваются значения
End Object
Components.Add(Sprite)

Изменение свойств шаблона, унаследованных от старшего класса

Как я уже говорил, шаблон наследуется подклассом класса шаблона. Этот пример наследует щаблон актора Sprite и изменяет только спрайт:
Begin Object Name=Sprite
   Sprite=Texture2D'EngineResources.S_SkyLight'
End Object

Динамически созданные компоненты

Для динамического создания компонента используется новый оператор UnrealScript - AttachComponent.
Работают с ним так.
 local StaticMeshComponent NewComponent;
NewComponent = new(self) class'StaticMeshComponent';
// Здесь присваиваем статик меш.
AttachComponent(NewComponent);
Для снятие аттача используется метод DetachComponent. Когда на компонент ничего не ссылается он уничтожается.

Общие параметры PrimitiveComponent

ТипИмяОписание
BooleanAlwaysLoadOnClientЕсли AlwaysLoadOnClient = False, примитив имеет HiddenGame = True и CollideActors = False, примитив не будет загружен в игру.
BooleanAlwaysLoadOnServerЕсли AlwaysLoadOnServer = False, примитив имеет CollideActors = False, примитив не будет загружен на сервере.
BooleanBlockActorsЕсли PrimitiveComponent имеет строку collision enabled, BlockActors определяет столкновения примитивов и будет блокировать других участников.
BooleanCastShadowИстинно, если PrimitiveComponent имеет тень, иначе – ложно
BooleanCollideActorsЕсли один из акторов bCollideActors или CollideActors является ложным, примитив не будет просчитывать столкновения.
BooleanHiddenEditorЛожно, если PrimitiveComponent должен быть вынесен в редактор, иначе - истинно.
BooleanHiddenGameЛожно, если PrimitiveComponent должен быть вынесен в игре, иначе истинно

Встроенные типы компонентов

  • PrimitiveComponent
  • ArrowComponent
  • CameraConeComponent
  • CylinderComponent
  • DrawFrustumComponent
  • MeshComponent
    • StaticMeshComponent
    • SkeletalMeshComponent
    • ParticleSystemComponent
    • SpriteComponent
  • LightComponent
  • DirectionalLightComponent
  • PointLightComponent
  • SpotLightComponent
  • SkyLightComponent
  • AudioComponent
  • HeightFogComponent
  • SceneCaptureComponent
  • SceneCapture2DComponent
  • SceneCaptureCubeMapComponent
  • SceneCaptureParaboloidComponent
  • SceneCaptureReflectComponent

Просмотров: 2 999

ScorpioT1000 #1 - 9 лет назад 0
Хорошо, что есть кто-то, кто эим занимается. Найти бы ещё тех, кто этим интересуется..
BK.Jugg #2 - 9 лет назад 0
+1 :(
хотя, если активно заполнять базу, то, возможно люди сами потянутся.
justQd #3 - 7 лет назад 0
Лично я даже не подозревал что на XGM есть раздел посвященный UE. Перешел сюда по ссылке с unreal-level. Был удивлен. Jugg, продолжай писать :) буду учиться.