九、虚幻架构
1.游戏性类
a.游戏性类的前缀有:1.A 它们是 Actor,可直接生成到世界场景中。
2.U 必须从属于Actor,与组件类似的对象。
b.游戏性类头文件不许出现:#include "ClassName.generated.h"这行代码。
c.类声明的语法如下:
UCLASS([specifier, specifier, ...], [meta(key=value, key=value, ...)])
class ClassName : public ParentName
{
GENERATED_BODY()
}
c.在声明类时,声明上可添加修饰符以控制引擎和编辑器的不同方面的类表现:
1.UCLASS(abstract) :Abstract类修饰符将类声明为“抽象基类”,这样会阻止用户在虚幻编辑器中向这个世界中添加这个类的Actor,或者在游戏过程中创建这个类的实例。
2.UCLASS(blueprintable) :指定该类为创建蓝图的可接受基类。
3.UCLASS(ClassGroup=GroupName) :表示虚幻编辑器的Actor浏览器在Actor浏览器中启用Group View(组视图)的时候应该在指定的GroupName(组名称)中包括这个类及其所有子类。
4.UCLASS(const):本类中的所有属性及函数均为常量,并应作为常量导出。
5.UCLASS(Deprecated):该类已被废弃,并且该类的对象在序列化时将不会被保存。
6.UCLASS(showFunctions=FunctionName):在属性视图中显示指定的函数。
d.所有的游戏性类必须使用 GENERATED_BODY 宏进行正常实现。
2.函数
a.函数可以两种基本形式存在:普通C++函数或UFunction。C++函数和UFunction均在.h类头文件中进行声明。
b.UFunctions的声明语法如下:
UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)])
ReturnType FunctionName([Parameter, Parameter, ...])
c.在声明函数时,声明上可添加修饰符以控制引擎和编辑器的不同方面的属性表现:
1.UFUNCTION(BlueprintAuthorityOnly):如无网络权限,则该函数将不会从蓝图代码中执行
2.UFUNCTION(BlueprintCallable):该函数可在蓝图或关卡蓝图图表内执行。
3.UFUNCTION(BlueprintImplementableEvent):此函数可以在蓝图或关卡蓝图图表内进行重载。
4.UFUNCTION(BlueprintPure):此函数不会以任何方式影响其从属对象,并且可在蓝图或关卡蓝图图表中执行。
5.UFUNCTION(Category="MajorCategory,SubCategory"):当在蓝图编辑工具中显示时,定义函数的分类。
6.UFUNCTION(Unreliable):此函数在网络间复制,但可能会由于带宽限制或网络错误而传送失败。
3.接口
a.接口类的声明和常规类的声明非常相似,声明方法如下:
UINTERFACE([specifier, specifier, ...], [meta(key=value, key=value, ...)])
class ClassName :ParentName
b.在声明接口时,声明上可添加修饰符以控制引擎和编辑器的不同方面的接口表现:
1.UINTERFACE(Blueprintable):指定该类为创建蓝图的可接受基类。
2.UINTERFACE(DependsOn=(ClassName, Classname, ...)):表示ClassName是在这个类之前进行编译的。ClassName必须在同一个(或者是以前的)软件包中指定一个类。
3.UINTERFACE(MinimalAPI):使得类的类型信息由其他模块导出以供使用。
4.UINTERFACE(NotBlueprintable):指定该类不是创建蓝图的可接受基类。
4.属性
a.属性声明:将此变量对虚幻引擎公开,需要将其转换为一个UPROPERTY
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, category = "CS3UserWidget"):可编辑
5.结构体
a.游戏性类中的结构体可包含变量,包括UProperty变量、函数和运算符。结构体的声明发生在类的声明之前:
USTRUCT([Specifier, Specifier, ...])
struct StructName
{
GENERATED_USTRUCT_BODY()
};
b.声明结构体时说明符可被添加到声明,以便控制结构体与引擎和编辑器诸多方面的相处方式:
1.USTRUCT(Atomic):意味着这个struct要一直作为一个单独的单元进行序列化。
2.USTRUCT(BlueprintType):将此结构体作为用于蓝图中变量的类型。
3.USTRUCT(NoExport):不会为该类创建自动生成的代码;