UDN
Search public documentation:

UnrealScriptClassesCH
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 主页 > UnrealScript > UnrealScript 语言参考指南 > UnrealScript 类

UnrealScript 类


概述


实质上是游戏中引擎要使用的内容的设计图纸。可以使用这个图纸创建这个类的一个 实例 ,也就是引擎实际处理的东西。在通用编程术语中,类的任何实例都被称为 对象 。它对于 UnrealScript 也适用; 但是,在游戏中玩家可以看到并交互的内容在虚幻中被称为 Actors ,因为它们是由 Actor 类扩展而来的。这里有从基类 Object 类直接扩展而来的类,但是它们通常都是供 Actor 使用的辅助类,例如组件

UnrealScript 中类和对象的概念与大多数其他面向对象的编程语言相似。网络上到处都是有关这方面的信息。

类声明


每个脚本对应的是具体的一个类,而脚本开始部分声明了类、类的父项以及与这个类相关的全部信息。最简单的格式是:

MyClass.uc
class MyClass extends MyParentClass;

在这里声明了一个名为 MyClass 的新类,它继承了 MyParentClass 的功能。这意味着每个类中都包含其父代类中的所有变量、函数和声明。此外,它接下来可以添加新的变量声明,添加新函数(或覆盖现有函数),以及添加新的声明(或向现有声明中添加功能)。

继承和多态的概念(函数的覆盖)对于编程新手来说是很重要的,并可以保证其他研究顺利进行,尤其是面向对象语言。

类修饰符


类声明可以声明几个会影响这个类的可选修饰符。这些关键字紧接在基础类声明后面,但是就到在分号前面结束这个声明。它们可以与声明全部在同一行或者在声明后面的单独行上(如果使用的是新的行,对它们进行缩进排版是不错的方案)。

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

或:

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

下面列出了可用的修饰符,并附有描述:

Native(PackageName)
表示“这个类使用的是幕后 C++ 支持”。虚幻希望 native 类在 .EXE 中包含一个 C++ 实现。 只允许 native 类声明 native 函数或实现 native 接口。 Native 类必须始终由其他 native 类衍生而来。 Native 类可以使用必要的 技巧 创建一个自动生成的 C++ 头文件,与脚本变量和指定的函数进行交互。 默认情况下, PackageName 是存放脚本类的包。例如,如果这个类在引擎包中,最后自动生成的头文件将会被命名为 EngineClasses.h
NativeReplication
表示这个类的变量值的复制函数在 C++ 实现中进行处理。 只对 native 类有效。
DependsOn(ClassName[,ClassName,...])
表示 ClassName 是在这个类之前进行编译的。 ClassName 必须在同一个(或者是以前的)软件包中指定一个类。 可以使用一个由逗号界定的单独 DependsOn 行指定多个从属类,或者可以使用一个独立的 DependsOn 行为每个类指定。这在类使用一个在其他类中声明的结构体或枚举变量时非常重要,因为编译器只知道在它已经编译的类中都有些什么。
Abstract
会将类声明为“抽象基类”。这样会阻止用户在虚幻编辑器中向这个世界中添加这个类的 actor,或者在游戏过程中创建这个类的实例,因为这个类本身没有任何意义。例如, Actor 基类是抽象类,而 Ladder 子类不是抽象类 -- 那么您可以在世界中放置一个 Ladder ,但是您不能将 Actor 放置在世界中。 将该关键字传递到固有子代类中,但是不要编写子代类脚本。例如, Actor 是抽象类且 PawnActor 扩展而来,但是没有将其声明为抽象类。没有继承修饰符,所以可以对 Pawns 进行实例化。
Deprecated
使这个类的所有对象都会被加载但是却不会保存。作废 actor 的任何放置实例都会在关卡设计师加载编辑器中的地图时发出警告信息。 将这个关键字传递给子类。
Transient
也就是“属于这个类的对象永远不应该保存在磁盘上”。只有在与特定类型的 native 类结合在一起才有效,它们本质上不是固定的,例如玩家或窗口。 将这个关键字传递给子类,子类可以使用 NonTransient 关键字覆盖这个标志。
NonTransient
使从基类继承的 Transient 关键字无效。
Config(IniName)
表示允许这个类在配置文件 (.ini)中存储数据。 如果在这个类中有任何可配置的变量(使用 configglobalconfig 变量修饰符进行声明),这个修饰符会将这些变量存储在 ( 和 ) 内的指定配置文件中。 将这个标志传递给所有子类,而且无法使这个标志无效,但是子类可以通过重新声明 Config 关键字并指定一个不同的文件名来更改这个 .ini 文件。将 IniName 的值添加到游戏名称后面 - 减去 "Game" 部分 - 指定要存储数据的 .ini 文件的名称(例如,在 UDKGame 指定 Config(Camera) 将会使这个类使用 UDKCamera.ini 文件)。还可以将关键字 inherit 指定为 IniName ,这样做会使得这个类使用与它的父代相同的配置文件。默认情况下,会有一些 .ini 文件,例如:
  • Config(Engine): 使用引擎配置文件,也就是在您的游戏名称后面加上 Engine.ini 。 例如,UDKGame 的引擎配置文件的名称是 UDKEngine.ini
  • Config(Editor): 使用编辑器配置文件,也就是您的游戏名称后面加上 Editor.ini 。 例如,UDKGame 的编辑器配置文件的名称是 UDKEditor.ini
  • Config(Game): 使用游戏配置文件,也就是您的游戏名称后面加上 Game.ini 。 例如,UDKGame 的游戏配置文件的名称是 UDKGame.ini
  • Config(Input): 使用输入配置文件,也就是您的游戏名称后面加上 Input.ini 。 例如,UDKGame 的引擎配置文件的名称是 UDKInput.ini
PerObjectConfig
这个类的配置信息将会根据对象进行存储,其中每个对象在 .ini 文件中都有一项,它以这个对象的名字命名,形如 [ObjectName ClassName] 。 将这个关键字传递给子类。
PerObjectLocalized
这个类的本地化数据将会根据对象进行定义,其中每个对象在本地化文件中都有一项,以这个对象的名字命名,格式为 [ObjectName ClassName] 。 将这个关键字传递给子类。
EditInlineNew
编辑器。 表示这个类的对象可以通过虚幻编辑器属性窗口进行创建(默认的操作是只引用可以通过属性窗口进行分配的现有对象)。 将这个标志传递给所有子类,子类可以使用 NotEditInlineNew 关键字覆盖这个标志。
NotEditInlineNew
编辑器。 使从基类继承的 EditInlineNew 关键字无效。 如果没有使用 EditInlineNew 的父类,则不生效。
Placeable
编辑器。 表示可以在虚幻编辑器中创建这个类并将其放置到关卡、UI 场景或 kismet 窗口中(具体情况取决于类的类型)。 将这个标志传递给所有子类,子类可以使用 NotPlaceable 关键字覆盖这个标志。
NotPlaceable
编辑器。 使从基类继承的 Placeable 关键字无效。 表示在虚幻编辑器中不可以将这个类放置到关卡等等位置。
HideDropDown
编辑器。 禁止这个类显示在虚幻编辑器属性窗口组合框中。
HideCategories(Category[,Category,...])
编辑器。 为这个类的对象指定应该隐藏在虚幻编辑器属性窗口中的一个或多个类别。 要隐藏没有声明类别的变量,请使用声明这个变量的类的名称。将这个关键字传递给子类。
ShowCategories(Category[,Category,...])
编辑器。 使从基类继承的 HideCategories 关键字无效。
AutoExpandCategories(Category[,Category,...])
编辑器。 为这个类的对象指定应该在虚幻编辑器属性窗口中自动展开的一个或多个类别。 要自动展开没有声明类别的变量,请使用声明这个变量的类的名称。
CollapseCategories
编辑器。 表示这个类的属性不应该归类在虚幻编辑器属性窗口的类别中。 将这个关键字传递给子类,子类可以使用 DontCollapseCategories 关键字覆盖这个标志。
DontCollapseCategories
编辑器。 使从基类继承的 CollapseCatogories 关键字无效。
ForceScriptOrder(true/false)
编辑器。 强制属性窗口显示这个类的对象,可以对属性和类别使用脚本定义排序(如果为 true)或者按照字母顺序(如果为 false)。
Within ClassName
高级。表示这个类的对象在没有 ClassName 的实例的情况下无法存在。 为了创建这个类的对象,您必须将 ClassName 的实例指定为 Outer 对象。 该关键字必须紧接在这个类声明后面。
Inherits(ClassName[,ClassName,...])
高级。用于多个继承 - 可以指定其他基类。 可以使用一个由逗号界定的单独 Inherits 行指定多个基类,或者可以使用一个独立的 Inherits 行为每个类指定基类。 只对 native 类有效。 不支持通过两个 UObject 衍生的类生成的多个继承。
Implements(ClassName[,ClassName,...])
高级。指定一个或多个这个类将会实现的界面类。 可以使用一个由逗号界定的单独 Implements 行指定多个基类,或者可以使用一个独立的 Implements 行为每个类指定基类。 只有 native 类可以实现 native 界面。
NoExport
高级。表示这个类的 C++ 声明不应该在脚本编译器自动生成的 C++ 头文件中。 该 C++ 类声明必须在单独的头文件中手动进行定义。 只对 native 类有效。
ClassGroup(Groupname[,Groupname,...])
表示编辑器的 Actor 浏览器在 Actor 浏览器中启用 Group View(组视图)的时候应该在指定的 GroupName 中包括这个类及其所有子类。