UDN
Search public documentation:
UnrealScriptDefaultPropertiesKR
English Translation
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
中国翻译
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
언리얼스크립트 디폴트 프로퍼티
문서 변경내역: Tim Sweeney 원저. 홍성진 번역.
개요
defaultproperties
라는 특수 "코드" 블럭을 사용해서 클래스에 속하는 인스턴스 변수 일부 또는 전부에 대한 값을 설정, 해당 클래스의 인스턴스 생성시 초기화 용도로 쓸 수 있습니다. 이 코드 블럭은 항상 모든 함수와 스테이트 선언 이후 스크립트의 끝에 옵니다. UnrealScript 의 일부긴 하지만, 이 블럭의 코드는 표준 UnrealScript 가 아니라 약간 다른 규칙을 따릅니다.
디폴트 프로퍼티 값 지정하기
defaultproperties
블럭의 규칙은 표준 UnrealScript 문법과 약간 다릅니다. 일반적인 차이점은:
-
defaultproperties
블럭에 문(statement)은 허용되지 않지만, 동적 배열 작업은 예외입니다. 계산을 한다든가, 함수를 호출한다든가는 할 수 없다는 뜻입니다.defaultproperties
블럭은 오로지 인스턴스 변수에 실질적인 값을 할당하기 위한 용도입니다. - 줄 끝에 세미콜론을 넣을 수는 있지만, 필수는 아닙니다.
- (변수 이름, 할당 연산자, 값 사이같은 곳에) 공백은 쓰지 말아야 합니다.
-
defaultproperties
블럭을 여는 대괄호는 새 줄에 와야 합니다.
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 )}
- 인라인 정적 배열은 다음과 같이 선언해야 합니다. (여기서는 배열 구분자로 괄호 "()" 대신 각괄호 "[]" 가 쓰였음에 유의하십시오.):
StructProperty=(StaticArray[0]=Value,StaticArrayProp[1]=Value)
- 인라인 동적 배열은 한 줄 문법으로 선언해야 합니다:
StructProperty=(DynamicArray=(Value,Value))</code>
- 인라인 네임 변수는 큰 따옴표로 묶어야 합니다:
StructProperty=(NameProperty="Value")
- Empty - 전체 배열을 비웁니다.
Array.Empty
- Add(element) - 배열 끝에
element
를 추가합니다.Array.Add(element)
- Remove(element) - 배열에서
element
를 제거합니다. 모든element
일치 부분을 제거합니다.Array.Remove(element)
- RemoveIndex(index) - 주어진
index
의 요소를 제거합니다.Array.RemoveIndex(index)
- Replace(element1, element2) -
element1
을element2
로 대체합니다. 모든 일치 부분이 대체됩니다.element1
이 없으면 경고가 뜹니다.Array.Replace(element1, element2)
(Actor.uc
기준) 완전한defaultproperties
블럭 예제는 다음과 같습니다:defaultproperties { // 오브젝트 MessageClass=class'LocalMessage' // "Sprite" 라는 이름의 SpriteComponent 클래스 인라인 서브오브젝트 선언 Begin Object Class=SpriteComponent Name=Sprite // 여기 지정된 값이 SpriteComponent 의 defaultproperties 를 덮어씁니다. Sprite=Texture2D'EngineResources.S_Actor' HiddenGame=true End Object //todo Components.Add(Sprite) // "CollisionCylinder" 라는 이름의 CylinderComponent 클래스 인라인 서브오브젝트 선언 Begin Object Class=CylinderComponent Name=CollisionCylinder // 여기 지정된 값이 CylinderComponent 의 defaultproperties 를 덮어씁니다. CollisionRadius=10 CollisionHeight=10 AlwaysLoadOnClient=True AlwaysLoadOnServer=True End Object //todo Components.Add(CollisionCylinder) CollisionComponent=CollisionCylinder // float (앞의 '+' 와 뒤의 'f' 글자는 무시됩니다.) DrawScale=00001.000000 Mass=+00100.000000 NetPriority=00001.f // int NetUpdateFrequency=100 // enumeration Role=ROLE_Authority RemoteRole=ROLE_None // struct DrawScale3D=(X=1,Y=1,Z=1) // bool bJustTeleported=true bMovable=true bHiddenEdGroup=false bReplicateMovement=true // name InitialState=None // 동적 배열 (이 경우 동적 클래스 배열) SupportedEvents(0)=class'SeqEvent_Touch' SupportedEvents(1)=class'SeqEvent_UnTouch' SupportedEvents(2)=class'SeqEvent_Destroyed' SupportedEvents(3)=class'SeqEvent_TakeDamage' }
구조체 디폴트
UnrealScript 에서 구조체를 선언할 때, 옵션으로 구조체의 프로퍼티에도 디폴트 값을 지정할 수 있습니다. UnrealScript 에서 구조체가 사용될 때마다, 그 멤버는 이 값으로 초기화됩니다. 문법은 블럭 이름을 structdefaultproperties 로 해야 한다는 것을 제외하곤, 클래스에 대한 defaultproperties 블럭과 동일합니다. 예:struct LinearColor { var() config float R, G, B, A; structdefaultproperties { A=1.f } };
var LinearColor NormalColor, DarkColor; defaultproperties { NormalColor=(R=1.f,B=1.f,G=1.f) // 이 프로퍼티에 대한 값은 1.0f 이 됩니다. DarkColor=(R=1.f,B=1.f,G=1.f,A=0.2f) // A 의 값은 이 프로퍼티에 대해 0.2f 가 됩니다. }
변수 디폴트 값 접근하기
레벨 디자이너가 언리얼 에디터를 통해 오브젝트의 클래스 "디폴트" 변수를 수정할 수 있습니다. 클래스의 새 액터가 스폰되면, 그 모든 변수는 디폴트로 초기화됩니다. 가끔은 한 변수를 디폴트 값으로 수동 돌리는 것이 좋을 때도 있습니다. 예를 들어 플레이어가 인벤토리 아이템을 떨어뜨리면, 인벤토리 코드는 액터 값 일부를 디폴트로 리셋시켜 줘야 합니다. UnrealScript 에서는Default
키워드를 사용하여 클래스의 디폴트 변수에 접근할 수 있습니다. 예:var() float Health, Stamina; ... // 일부 변수를 디폴트로 돌립니다. function ResetToDefaults() { // health, stamina 를 리셋시킵니다. Health = Default.Health; Stamina = Default.Stamina; }
클래스 리퍼런스를 통해 변수 디폴트 값 접근하기
클래스 리퍼런스 (class
또는class<classlimitor>
형 변수)가 있는 경우, 그것이 가리키는 클래스의 디폴트 프로퍼티를, 해당 클래스의 오브젝트를 통하지 않고도 접근할 수 있습니다. 이 문법은 클래스 유형을 구하는 표현식과 함께 쓸 수 있습니다.var class C; var class
PC; Health = class'Spotlight'.default.LightBrightness; // Spotlight 클래스의 Lightbrightness // 디폴트 값에 접근합니다. Health = PC.default.Health; // PC 로 나타난 변수 클래스에 있는 // Health 의 디폴트 값에 접근합니다. Health = class (C).default.Health; // 형 변환된 클래스 표현식에 있는 // Health 의 디폴트 값에 접근합니다. - Add(element) - 배열 끝에