Определение значений по умолчанию с использованием блока defaultproperties

В дополнение к установке значений по умолчанию для свойств актора с использованией окна свойств в UnrealEd, вы также можете присвоить значения по умолчанию для переменных членов классов путем размещения специальных выоажений внутри блока класса defaultproperties.

  • В блоке defaultproperties не допустимо размещение операций, за исключением операций над динамическими массивами
  • Запятые могут быть размещены в конце каждой строки, но это не обязательно
  • Значения по умолчанию наследуются дочерними классами. Значения, указанные в defaultproperties дочернего класса переопределяют значения, указанные для базового классов.

Синтаксис
Синтаксис блока defaultproperties немного отличается от стандартного синтаксиса UnrealScript:

  • Простыетипы (Ints, Floats, Bools, Bytes):
    • VarName=Value
  • Статические массивы:
    • ArrayProp(0)=Value1
      ArrayProp(1)=Value2
      или
    • ArrayProp[0]=Value1
      ArrayProp[1]=Value2
  • Динамические массивы:
    • ArrayProp=(Value1,Value2,Value3)
      или
    • ArrayProp(0)=Value1
      ArrayProp(1)=Value2
      ArrayProp(2)=Value3
      или
    • ArrayProp.Add(Value1)
      ArrayProp.Add(Value2)
      ArrayProp.Add(Value3)
  • Имена
    • NameProp='Value'
      или
    • NameProp=Value
  • Объекты
    • ObjectProp=ObjectClass'ObjectName'
  • Подобъекты
    • Begin Object Class=ObjectClass Name=ObjectName
      VarName=Value
      ...
      End Object
      ObjectProperty=ObjectName
  • Структуры (включая векторы):
    • StructProperty=(InnerStructPropertyA=Value1,InnerStructPropertyB=Value2)
      или
    • StructProperty={(
      InnerStructPropertyA=Value1,
      InnerStructPropertyB=Value2
      )}


Обратите внимание: Внутри структуры значений по умолчанию некоторые типы используют несколько иной синтаксис.

  • Встраиваемые (inline) статические массивы должны быть объявлены как (Обратите внимание, что здесь для доступа к элементам массива используются скобки "[]", вместо круглых скобок "()"):
    StructProperty=(StaticArray[0]=Value,StaticArrayProp[1]=Value)
  • Встраиваемые (inline) динамические массивы должны быть объявлены с использованием следующего синтаксиса:
    StructProperty=(DynamicArray=(Value,Value))
  • Встраиваемые (inline) переменные имен должны быть заключены в кавычки:
    StructProperty=(NameProperty="Value")
  • Операции над динамическими массивами. Они могут быть использованы для модификации содержимого динамического массива, который может быть унаследован от бызового класса.
    • Array.Empty - полностью очищает массив
    • Array.Add(element) - добавляет элемент к концу массива
    • Array.Remove(element) - удаляет элемент из массива, эта процедура может удалить все вхождения элемента
    • Array.RemoveIndex(index) - удаляет элемент по указанному индексу
    • Array.Replace(elm1, elm2) - заменяет elm1 на elm2. Все вхождения будут заменены. Если elm1 будет не найден, то выводится предупреждение.


Ознакомьтесь со следующим примером (основанном на Actor.uc):

defaultproperties { // objects MessageClass=class'LocalMessage'   // declare an inline subobject of class SpriteComponent named "Sprite" Begin Object Class=SpriteComponent Name=Sprite // values specified here override SpriteComponent's own defaultproperties Sprite=Texture2D'EngineResources.S_Actor' HiddenGame=true End Object //todo Components.Add(Sprite)   // declare an inline subobject of class CylinderComponent named "CollisionCylinder" Begin Object Class=CylinderComponent Name=CollisionCylinder // values specified here override CylinderComponent's own defaultproperties CollisionRadius=10 CollisionHeight=10 AlwaysLoadOnClient=True AlwaysLoadOnServer=True End Object //todo Components.Add(CollisionCylinder)   CollisionComponent=CollisionCylinder   // floats (leading '+' and trailing 'f' characters are ignored) DrawScale=00001.000000 Mass=+00100.000000 NetPriority=00001.f   // ints NetUpdateFrequency=100   // enumerations Role=ROLE_Authority RemoteRole=ROLE_None   // structs DrawScale3D=(X=1,Y=1,Z=1)   // bools bJustTeleported=true bMovable=true bHiddenEdGroup=false bReplicateMovement=true   // names InitialState=None   // dynamic array (in this case, a dynamic class array) SupportedEvents(0)=class'SeqEvent_Touch' SupportedEvents(1)=class'SeqEvent_UnTouch' SupportedEvents(2)=class'SeqEvent_Destroyed' SupportedEvents(3)=class'SeqEvent_TakeDamage' }


Наши рекомендации