UE4中
#define UPROPERTY(...)
#define UFUNCTION(...)
#define USTRUCT(...)
#define UMETA(...)
#define UPARAM(...)
#define UENUM(...)
#define UDELEGATE(...)
#define RIGVM_METHOD(...)
- 说明:这些宏包装了由虚幻头工具解析的元数据,否则,当包含它们的代码被c++编译器编译时,这些宏会被忽略。
UPROPERTY
UPROPERTY(EditAnywhere) 任何地方
UPROPERTY(EditDefaultsOnly) 只有在类的编辑界面
UPROPERTY(EditInstanceOnly) 只有在拖拽到场景下类的编辑界面
UClass(meta=(ShowWorldContextPin)) 显示worldContext 接口 需要手动指定
UCLASS(NotBlueprintable) 蓝图类不可以继承该类
UFUNCTION(BlueprintCallable, meta=(AutoCreateRefTerm = "Param1"))
virtual F1(int Param1); //表示函数参数Param1 具有默认值 在蓝图中可以不用赋值
UCLASS(Blueprintable) 表示该c++类可以被蓝图继承
UCLASS(BlueprintType) 表示该类可作为蓝图变量
UPROPERTY(BlueprintAssignable)
用来指定delegate 变量
-
用来显示鼠标放置的提示内容 如果需要显示中文的话 注意将.h文件修改编码格式为utf-8
- UPROPERTY(meta=(ToolTip = “测试”))
-
将属性设置为节点的引脚,使用自定义ini文件存储变量值
- UPROPERTY(meta=(PinShownByDefault))
-
定义类
UCLASS(config = haha)
class LEARN_API AConfigActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AConfigActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(Config)
float ExVariable;
UPROPERTY(config, EditAnywhere, Category = About)
FGuid ProjectID;
};
-
这个时候进行编译,在工程的Config文件夹下就会创建一个Defaulthaha.ini文件,编辑文件内容
[/Script/Learn.ConfigActor]
ExVariable=33
这里需要注意的是Learn是你的模块名,一般默认就是工程名ConfigActor是你的类名,注意,这里没有A。
然后写下对应的Uproperty变量的值,运行程序就可以了,变量的读取不是实时的,假如进行修改的话,需要重启编辑器。
UCLASS(DisplayName = “CustomDisplayName”)
即可修改类在蓝图中显示的默认名称
UFUNCTION(BlueprintPure)
用于函数获得某些值 并且不会进行修改 -
隐藏变量到高级菜单中
UPROPERTY(EditAnywhere,AdvancedDisplay)
TestEnum testEnum;
如何声明一个变量既为private 又可以再蓝图中访问到,那么可以使用
UPROPERTY(BlueprintReadOnly, meta = (AllowPrivateAccess = “true”))
声明类在蓝图创建时对变量赋值
UPROPERTY(BlueprintReadWrite, meta = (ExposeOnSpawn = true))
int32 TestParam;
在C++中只声明,需要在蓝图中进行定义,用到关键字[BlueprintImplementableEvent]
UFUNCTION(BlueprintImplementableEvent, meta = (DisplayName = “ServerPlayerInit”))
void ServerStartInit_BP();
关键字
- 指定只在服务器执行-------server
UFUNCTION(reliable, server, WithValidation)
void ServerStartInit(FStepControllerInitInfo RepInfo);
注:如果函数定义为UFUNCTION(Server, Reliable, WithValidation),需要同时为其定义_Validate和_Implementation两个函数
UFUNCTION(Server, Reliable, WithValidation)
void ServerMove(FStepControllerInitInfo StepPlayerInfo);
virtual bool ServerMove_Validate(FStepControllerInitInfo StepPlayerInfo);
virtual void ServerMove_Implementation(FStepControllerInitInfo StepPlayerInfo);
- 指定只在客户端执行-------client
UFUNCTION(client, reliable)
void ClientClose();
-
可靠性-------reliable
- Reliable,不会丢失,立即发出,适合重要的事件
- Unreliable,可能会丢失,适合表现相关的和不重要的事件
- 全部的远程调用都使用Reliable,可能会造成网络拥堵
- 尽量避免在循环里面使用远程调用和勾选Reliable选项
-
验证-------WithValidation
-
同步-------Replicated
- 服务器和客户端数据同步
UPROPERTY(Replicated, BlueprintReadOnly) int32 mGameResult = 0;
UE4C++定义属性修饰符总结
名称 | 描述 |
---|---|
BlueprintAssignable | 暴露该属性来在蓝图中进行赋值,用于绑定多播委托 |
BlueprintCallable | 用于从蓝图中调用C++原生函数 |
BlueprintReadOnly | 蓝图读取,但不能修改且与BlueprintReadWrite不兼容 |
BlueprintReadWrite | 蓝图读取和写入 |
EditAnywhere | 可以在编辑器内的属性窗口编辑,在原型和实例中都能编辑 |
EditDefaultsOnly | 通过属性窗口来编辑,但仅能对原型编辑 |
EditFixedSize | 仅限于动态数组,不能通过编辑属性的窗口来变更数组的长度 |
EditInline | 通过此修饰符可编辑属性查看器中的变量所引用的对象属性。(仅对对象引用可用,包括对象引用数组) |
EditInstanceOnly | 可通过属性窗口来编辑实例,但仅能对实例而非原型进行编辑 |
VisibleAnywhere | 该属性只在属性窗口中可见,但无法被编辑 |
VisibleDefaultsOnly | 仅在原型的属性窗口中可见,且无法被编辑 |
VisibleInstanceOnly | 该属性仅在实例的属性窗口中可见,且无法被编辑 |
AdvancedDisplay | 属性被显示在细节面板的高级下拉框中 |
UE4各个文件夹的功能
- 以UMGProject测试工程为例
名称 | 功能 |
---|---|
Config | 配置文件 |
Content | 资产文件 |
DerivedDataCache | 数据缓存 |
Intermediate | 编译运行文件 |
Saved | 日志文件 |
UMGProject.uproject | 项目文件 |