UDN
Search public documentation:

UnrealScriptClassesKR
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

UE3 홈 > 언리얼스크립트 > 언리얼스크립트 언어 참고서 > 언리얼스크립트 클래스

언리얼스크립트 클래스


문서 변경내역: Tim Sweeney 원저. Jeff Wilson 정리. 홍성진 번역.

개요


클래스 는 본질적으로 게임 내에서 엔진이 사용하는 아이템에 대한 청사진입니다. 이 청사진은 클래스의 인스턴스 를 만드는 데 사용되는 것으로, 이걸 가지고 엔진이 실제로 작업을 합니다. 일반적인 프로그래밍 용어로, 클래스의 인스턴스는 오브젝트 라 합니다. UnrealScript 에도 마찬가지인데, 언리얼의 게임 내에서 플레이어가 보고 상호작용하는 아이템들은 액터 라고 하는데, Actor 클래스를 확장(extend)한 것이기 때문입니다. 베이스 Object 클래스를 직접 확장하는 클래스도 있는데, 보통은 액터가 사용하는 헬퍼 클래스로, 컴포넌트 같은 것입니다.

UnrealScript 의 클래스와 오브젝트 개념은 대부분의 객체 지향형 프로그래밍 언어와 유사합니다. 이에 대한 정보는 인터넷에 가득 널려 있습니다.

클래스 선언


각 스크립트는 정확히 하나의 클래스에 해당되며, 스크립트는 클래스, 클래스의 부모 그리고 그 클래스와 관계있는 모든 추가 정보를 선언하는 것으로 시작됩니다. 가장 간단한 클래스의 형태는 다음과 같습니다:

MyClass.uc
class MyClass extends MyParentClass;

여기 MyClass 라는 이름의 클래스가 새로 선언되었으며, MyParentClass 의 함수성을 상속받습니다. 각각의 클래스는 부모 클래스의 변수, 함수, 스테이트를 모두 포함한다는 뜻입니다. 거기에 추가로 새로운 변수 선언, 새로운 함수 추가 (또는 기존 함수 덮어쓰기), 새로운 스테이트 추가 (또는 기존 스테이트에 함수성 추가) 등이 가능합니다.

상속성과 다형성(함수 덮어쓰기) 개념은 중요하며, 프로그래밍, 특히 객체 지향형 언어에 익숙치 않은 분들의 추가적인 연구를 타당하게 만듭니다.

클래스 지정자(Specifier)


클래스 선언은 클래스에 영향을 끼치는 옵션 지정자를 여럿 받을 수 있습니다. 이 키워드는 기본 클래스 선언을 따르며, 선언을 끝내는 세미콜론 전에 옵니다. 모두 선언과 같은 줄에 올 수도 있으며, 선언 다음 별도의 줄에 올 수도 있습니다. (새 줄을 사용하는 경우 들여쓰기 습관을 들이는 것이 좋습니다.)

MyClass.uc
class MyClass extends MyParentClass [Specifier Specifier ... Specifier];

또는

MyClass.uc
class MyClass extends MyParentClass
   [Specifier
   Specifier
   ...
   Specifier];

사용가능한 지정자와 그에 대한 설명은 다음과 같습니다:

Native(PackageName) 네이티브
"이 클래스는 내부적으로 지원되는 C++ 를 사용함"을 나타냅니다. 언리얼은 네이티브 클래스가 .EXE 에 C++ 구현이 포함될 것을 기대합니다. 네이티브 클래스만이 네이티브 함수를 선언하거나 네이티브 인터페이스를 구현할 수 있습니다. 네이티브 클래스는 항상 다른 네이티브 클래스에서 파생되어야 합니다. 네이티브 클래스는 스크립트 변수와 지정된 함수와 상호작용하기 위해서 필수 glue 를 포함한 자동 생성 C++ 헤더 파일을 만듭니다. 디폴트로 PackageName 패키지에 스크립트 클래스가 들어갑니다. 예를 들어 클래스가 Engine 패키지에 있었다면, 자동 생성되는 헤더는 EngineClasses.h 가 됩니다.
NativeReplication 네이티브 리플리케이션
이 클래스에 대한 변수 값 리플리케이션은 C++ 구현에서 처리됨을 나타냅니다. 네이티브 클래스에서만 유효합니다.
DependsOn(ClassName[,ClassName,...]) 의존
ClassName 은 이 이 클래스 이전에 컴파일됨을 나타냅니다. ClassName 은 같은 (또는 이전의) 패키지에 있는 클래스를 지정해야 합니다. 다중 의존성 클래스는 하나의 DependsOn 줄에 쉼표로 구분해서 지정해도 되고, 각 클래스별로 DependsOn 줄을 별도로 써서 지정해도 됩니다. 한 클래스가 다른 클래스에서 선언된 구조체나 열거형을 사용할 때 중요한데, 컴파일러는 이미 컴파일된 클래스에 있는 것만 인식할 수 있기 때문입니다.
Abstract 추상
클래스를 "추상 베이스 클래스"로 선언합니다. 사용자가 언리얼 에디터에서 이 클래스의 액터를 월드에 추가하거나 게임 도중 이 클래스의 인스턴스를 만들지 못하도록 합니다. 왜냐면 이 클래스 자체로는 의미가 없기 때문입니다. 예를 들어 Actor 베이스 클래스는 추상형인 반면, Ladder 서브클래스는 추상형이 아닙니다. Ladder 는 월드에 놓을 수 있지만, Actor 는 월드에 놓을 수 없습니다. 이 키워드는 intrinsic(본질적인) 자손 클래스에는 전파되지만, 스크립트 자손 클래스에는 전파되지 않습니다. 예를 들어 Actor 가 추상형이고 PawnActor 를 확장하긴 하지만 추상형으로 선언되지 않았습니다. Pawn 이 인스턴스화될 수 있도록 지정자는 상속되지 않습니다.
Deprecated 폐기
이 클래스의 모든 오브젝트를 로드는 해도 저장은 되지 않도록 합니다. 폐기된 액터의 인스턴스가 놓인 것이 있는 맵을 에디터에서 로드할 때, 레벨 디자이너가 알아볼 수 있도록 경고가 뜹니다. 이 키워드는 자손 클래스에 전파됩니다.
Transient 휘발성
"이 클래스에 속하는 오브젝트는 절대로 디스크에 저장되지 않음"이라는 것입니다. 플레이어나 윈도우처럼 본질적으로 지속성을 띄지 않는 일정한 종류의 네이티브 클래스와 함께 쓸 때만 의미가 있습니다. 이 키워드는 자손 클래스에 전파되며, 자손 클래스에서는 NonTransient 키워드를 사용해서 이 옵션을 덮어쓸 수 있습니다.
NonTransient 비휘발성
베이스 클래스에서 상속된 Transient 키워드를 무효화시킵니다.
Config(IniName) 환경설정
이 클래스는 환경설정 파일 (.ini) 에 데이터를 저장할 수 있음을 나타냅니다. 클래스에서 (config 또는 globalconfig 변수 지정자 로 선언된) 환경설정가능 변수가 있는 경우, 이 지정자의 ( ) 안에 지정된 환경설정 파일에 그 변수가 저장되도록 합니다. 이 옵션은 모든 자손 클래스에 전파되며 무효화시킬 수 없지만, 자손 클래스에서 Config 키워드를 다시 선언하고 다른 파일명을 지정하여 .ini 파일을 바꿀 수는 있습니다. IniName 값을 게임 이름에 "Game" 부분을 빼고 덧붙여 데이터를 저장할 .ini 파일 이름을 지정합니다. (예를 들어 UDKGame 에서 Config(Camera) 를 지정하면 클래스가 UDKCamera.ini 파일을 사용하게 됩니다.) inherit 키워드 역시도 IniName 으로 지정할 수 있는데, 클래스가 부모와 똑같은 환경설정 파일을 사용하게 만듭니다. 기본적으로 존재하는 .ini 파일은 다음과 같습니다:
  • Config(Engine): Engine 환경설정, 게임 이름에 Engine.ini 가 붙는 파일을 사용합니다. 예를 들어 UDKGame 의 엔진 환경설정 파일 이름은 UDKEngine.ini 입니다.
  • Config(Editor): Editor 환경설정, 게임 이름에 Editor.ini 가 붙는 파일을 사용합니다. 예를 들어 UDKGame 의 에디터 환경설정 파일 이름은 UDKEditor.ini 입니다.
  • Config(Game): Game 환경설정, 게임 이름에 Game.ini 가 붙는 파일을 사용합니다. 예를 들어 UDKGame 의 게임 환경설정 파일 이름은 UDKGame.ini 입니다.
  • Config(Input): Input 환경설정, 게임 이름에 Input.ini 가 붙는 파일을 사용합니다. 예를 들어 UDKGame 의 인풋 환경설정 파일 이름은 UDKInput.ini 입니다.
PerObjectConfig 오브젝트별 환경설정
이 클래스에 대한 환경설정 정보는 오브젝트별로 저장되며, 각 오브젝트에는 오브젝트 이름을 딴 .ini 파일에 [ObjectName ClassName] 형식으로 된 섹션이 있습니다. 이 키워드는 자손 클래스에 전파됩니다.
PerObjectLocalized 오브젝트별 현지화
이 클래스에 대한 현지화 데이터는 개별 오브젝트 단위로 정의되며, 각 오브젝트에는 오브젝트 이름을 딴 현지화 파일에 [ObjectName ClassName] 형식으로 된 섹션이 있습니다. 이 키워드는 자손 클래스에 전파됩니다.
EditInlineNew 편집시 바로 추가
에디터. 이 클래스의 오브젝트는 언리얼 에디터의 프로퍼티 창에서 만들 수 있음을 나타냅니다. (기본 동작은 프로퍼티 창을 통해서는 기존 오브젝트로의 리퍼런스만 할당할 수 있습니다) 이 옵션은 모든 자손 클래스에 전파되며, 자손 클래스에서는 NotEditInlineNew 키워드를 사용해서 이 옵션을 덮어쓸 수 있습니다.
NotEditInlineNew 편집시 바로 추가 불가
에디터. 베이스 클래스에서 상속받은 EditInlineNew 키워드를 무효화시킵니다. 부모 클래스에서 EditInlineNew 를 사용하지 않는다면 아무런 효과도 없습니다.
Placeable 놓기 가능
에디터. 이 클래스는 언리얼 에디터에서 만들어서 (클래스 타입에 따라) 레벨, UI 씬, 키즈멧 창에 놓을 수 있음을 나타냅니다. 이 옵션은 모든 자손 클래스에 전파됩니다. 자손 클래스에서는 NotPlaceable 키워드를 사용하여 이 옵션을 덮어쓸 수 있습니다.
NotPlaceable 놓기 불가
에디터. 베이스 클래스에서 상속받은 Placeable 키워드를 무효화시킵니다. 이 클래스는 언리얼 에디터 안에서 레벨 등에 놓을 수 없음을 나타냅니다.
HideDropDown 내리펼침 숨김
이 클래스가 언리얼 에디터 프로퍼티 창의 콤보 박스에 표시되지 않도록 합니다.
HideCategories(Category[,Category,...]) 범주 숨김
에디터. 이 클래스의 오브젝트에 대해서는 언리얼 에디터 프로퍼티 창에서 하나 이상의 범주를 숨기도록 지정합니다. 범주 없이 선언된 변수를 숨기려면, 변수를 선언한 클래스 이름을 사용하십시오. 이 키워드는 자손 클래스에 전파됩니다.
ShowCategories(Category[,Category,...]) 범주 표시
에디터. 베이스 클래스에서 상속받은 HideCategories 를 무효화시킵니다.
AutoExpandCategories(Category[,Category,...]) 범주 자동 펼침
에디터. 이 클래스의 오브젝트에 대해서는 언리얼 에디터의 프로퍼티 창에서 하나 이상의 범주가 자동 펼쳐지도록 지정합니다. 범주 없이 선언된 변수를 자동으로 펼치려면, 변수를 선언한 클래스 이름을 사용하십시오.
CollapseCategories 범주 접음
에디터. 이 클래스의 프로퍼티는 언리얼 에디터 프로퍼티 창의 범주에 그룹으로 묶이지 않음을 나타냅니다. 이 키워드는 자손 클래스에 전파되며, 자손 클래스는 DontCollapseCategories 키워드를 사용하여 이 옵션을 덮어쓸 수 있습니다.
DontCollapseCategories 범주 접지 않음
에디터. 베이스 클래스에서 상속받은 CollapseCatogories 키워드를 무효화시킵니다.
ForceScriptOrder(true/false) 강제 스크립트 순서
에디터. 이 클래스의 오브젝트를 표시하는 프로퍼티 창에서 프로퍼티와 범주를 표시할 때 (참이면) 강제로 사용자 정의 순서대로, 또는 (거짓이면) 알파벳 순서대로 정렬되도록 합니다.
Within ClassName 안에
고급. 이 클래스의 오브젝트는 ClassName 인스턴스 없이는 존재할 수 없음을 나타냅니다. 이 클래스의 오브젝트를 만들려면, ClassName 인스턴스를 Outer 오브젝트로 지정해야 합니다. 이 키워드는 클래스 선언 자체 뒤에 처음 뒤따라와야 합니다.
Inherits(ClassName[,ClassName,...]) 상속
고급. 다중 상속시 추가 베이스 클래스를 지정하는 데 사용됩니다. 여러 베이스 클래스는 Inherits 한 줄에 쉼표로 구분해서 지정해도 되고, 각 베이스 클래스마다 Inherits 한 줄씩 별도로 지정해도 됩니다. 네이티브 클래스에만 유효합니다. 두 UObject 파생 클래스에서의 다중 상속은 지원되지 않습니다.
Implements(ClassName[,ClassName,...]) 구현
고급. 이 클래스가 구현할 인터페이스 클래스를 하나 이상 지정합니다. 다중 인터페이스는 Implements 한 줄에 쉼표로 구분해서 지정해도 되고, 각 인터페이스 클래스마다 Implements 한 줄씩 별도로 지정해도 됩니다. 네이티브 클래스에서만 네이티브 인터페이스를 구현할 수 있습니다.
NoExport 익스포트 없음
고급. 이 클래스의 C++ 선언이 스크립트 컴파일러가 자동 생성하는 C++ 헤더 파일에 포함되지 않음을 나타냅니다. C++ 클래스 선언은 별도의 헤더 파일에 수동으로 정의해 줘야 합니다. 네이티브 클래스에 대해서만 유효합니다.
ClassGroup(Groupname[,Groupname,...]) 클래스 그룹
에디터의 액터 브라우저에서 그룹 뷰가 켜졌을 때, 지정된 GroupName 안에 이 클래스와 그 서브클래스를 포함시킬 것인지를 나타냅니다.