Определение значений по умолчанию с использованием блока 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' } |