UE4 UPROPERTY属性修饰符用bool变量控制变量是否可编辑

这段博客内容涉及Unreal Engine中的UProperty使用,特别是EditAnywhere, BlueprintReadWrite属性及EditCondition元数据的运用。通过设定EditCondition,可以控制在蓝图编辑器中boolA的值是否影响boolB和boolC的可见性,从而实现UI交互逻辑的定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

meta = (EditCondition = bool变量)

UPROPERTY(EditAnyWhere, BlueprintReadWrite, Category = "UPROPERTY Test")
		bool A;
	UPROPERTY(EditAnyWhere, BlueprintReadWrite, meta = (EditCondition = A), Category = "UPROPERTY Test")
		bool B;
	UPROPERTY(EditAnyWhere, BlueprintReadWrite, meta = (EditCondition = A), Category = "UPROPERTY Test")
		bool C;

 

<think>好的,我现在需要回答用户关于UE5 C++中类似静态函数的关键字或概念的问题。用户之前询问了一个UFUNCTION的解析,现在希望了解更多像“static”这样的关键字,并要列举和介绍。 首先,用户提到“static:静态函数,可通过类名直接调用”,并要求列举其他类似的关键字。我需要回忆UE5 C++中常用的类成员修饰符和相关概念,可能与静态函数有类似作用或特性的关键字有哪些。 首先想到的是C++中的存储类说明符,如static、extern、mutable,但UE可能有自己的扩展。然后是UE特定的宏,如UFUNCTION、UCLASS、UPROPERTY等,这些宏用于标记类的元数据,但用户可能更关注成员函数和变量修饰符。 接下来,应该考虑UE中的其他函数修饰符,比如const、virtual、override、final,这些影响函数行为的关键字。此外,UE中的元数据如BlueprintCallable、Category等虽然不是关键字,但作为UFUNCTION的参数,也是重要的。 需要明确区分C++原生关键字和UE的宏或修饰符。用户的问题可能包括两者,但需要以UE5为主。 例如,static属于C++关键字,而UFUNCTION是UE的宏。用户可能希望了解在UE开发中常用的这些修饰符,包括C++本身的以及UE扩展的部分。 接下来,应该列举并解释每个相关的关键字或宏,说明它们在UE5 C++中的作用和使用场景。例如: 1. static:静态成员,属于类而不是实例,可通过类名访问。 2. const:成员函数,表示不修改对象状态。 3. virtual:虚函数,支持多态。 4. override:显式重写基类虚函数。 5. final:禁止派生类重写虚函数。 6. friend:友元函数或类,可以访问私有成员。 7. mutable:允许在const成员函数中修改的成员变量。 8. inline:建议编译器内联函数体。 9. UFUNCTION:标记函数为UE反射系统的一部分,支持蓝图调用等。 10. UPROPERTY:标记属性,使其在编辑器和蓝图中可见。 11. BlueprintCallable/BlueprintPure:UFUNCTION的参数,允许蓝图调用函数。 12. Category:UFUNCTION或UPROPERTY的分类,用于编辑器组织。 13. 其他元数据如meta=(...),用于指定额外属性,如WorldContext。 需要确保每个条目的解释准确,并结合UE5的特定用法举例,尤其是与静态函数类似用途的部分,比如BlueprintCallable静态函数可以通过类名在蓝图中调用。 同时,要注意用户可能对UE中的特定宏和修饰符更感兴趣,因此需要详细说明这些内容,比如UFUNCTION的不同参数如何影响函数的行为和可见性。 可能还需要提醒一些注意事项,比如在UE中使用静态函数时的限制,如不能访问非静态成员变量,或者在蓝图中使用静态函数需要正确设置UFUNCTION的参数等。 此外,可能需要区分UE特有的关键字和标准C++的关键字,帮助用户理解哪些是UE扩展的,哪些是C++原生的。例如,BlueprintCallable是UE宏的一部分,而static是C++关键字。 最后,需要组织这些信息,使其结构清晰,逐步介绍每个关键字或概念,并给出示例或使用场景,以帮助用户更好地理解和应用。</think>在UE5 C++开发中,与`static`类似的关键字和修饰符有很多,以下是常见的关键字及其作用详解,按功能分类整理: --- ### 一、**核心C++关键字** #### 1. **`static`** - **作用**:声明静态成员(函数/变量) - **特点**: - 属于类本身而非实例,通过`类名::成员名`访问 - 静态函数不能访问非静态成员变量 - 常用于工具函数或共享数据 - **UE示例**: ```cpp class UMyUtils : public UObject { UFUNCTION(BlueprintCallable, Category="Tools") static void PrintDebug(FString Message); // 静态工具函数 }; ``` #### 2. **`const`** - **作用**:声明不可修改性 - **用法**: - **成员函数**:`void GetPosition() const;`(承诺不修改对象状态) - **参数**:`const FVector& Location`(防止意外修改) - **返回值**:`const TArray<AActor*>& GetActors() const;`(返回只读引用) #### 3. **`virtual` / `override` / `final`** - **作用**:实现多态 - `virtual`:声明虚函数(基类) - `override`:显式声明覆盖基类虚函数(C++11) - `final`:禁止派生类继续覆盖 - **UE示例**: ```cpp virtual void BeginPlay() override; // Actor生命周期函数 virtual void Tick(float DeltaTime) final; // 禁止子类修改Tick逻辑 ``` #### 4. **`friend`** - **作用**:允许友元类/函数访问私有成员 - **UE场景**: ```cpp class UInventorySystem { friend class APlayerCharacter; // 允许PlayerCharacter直接操作私有库存数据 }; ``` --- ### 二、**UE专属宏** #### 1. **`UFUNCTION`** - **核心参数**: - `BlueprintCallable`:允许蓝图调用 - `BlueprintPure`:无副作用的纯函数(可用于蓝图计算) - `Category`:蓝图节点分类 - `meta`:元数据(如`WorldContext="WorldContextObject"`) #### 2. **`UPROPERTY`** - **常用参数**: - `VisibleAnywhere`:在编辑器所有界面可见 - `EditDefaultsOnly`:仅在类默认值中可编辑 - `BlueprintReadOnly`:蓝图只读访问 - `Replicated`:网络同步 #### 3. **`UCLASS`** - **关键参数**: - `Blueprintable`:允许创建蓝图子类 - `NotBlueprintable`:禁止蓝图继承 - `Abstract`:抽象类(不能实例化) --- ### 三、**函数修饰进阶** #### 1. **`FORCEINLINE`** - **作用**:强制编译器内联函数(性能优化) - **示例**: ```cpp FORCEINLINE bool IsValid() const { return Health > 0; } ``` #### 2. **`DEPRECATED`** - **作用**:标记函数已废弃 - **用法**: ```cpp UFUNCTION(BlueprintCallable, DEPRECATED("Use NewShoot() instead")) void OldShoot(); ``` --- ### 四、**参数修饰符** #### 1. **`UPARAM`** - **作用**:为蓝图参数添加元数据 - **示例**: ```cpp UFUNCTION(BlueprintCallable) void SetDamage( UPARAM(DisplayName="伤害值") float Damage // 在蓝图中显示自定义参数名 ); ``` #### 2. **`out`参数** - **作用**:显式标记输出参数 - **UE惯例**: ```cpp UFUNCTION(BlueprintCallable) void FindEnemies(TArray<AActor*>& OutEnemies); // 通过引用传递结果 ``` --- ### 五、**模板与容器** #### 1. **`TArray`** - **特性**: - UE动态数组(类似`std::vector`) - 支持内存池优化 - 常用操作:`Add`, `Remove`, `Find` #### 2. **`TMap` / `TSet`** - **用法**: ```cpp TMap<FString, int32> PlayerScores; TSet<AActor*> ActiveActors; ``` --- ### 六、**实战技巧总结** | 关键字/宏 | 典型应用场景 | 注意事项 | |-----------------|---------------------------------------|-----------------------------------| | `static` | 工具类函数、全局配置数据 | 避免过度使用导致代码耦合 | | `BlueprintCallable` | 暴露功能给设计师使用的工具方法 | 确保函数线程安全 | | `const` | Getter方法、参数传递 | 与`mutable`配合使用时有风险 | | `override` | 重写引擎生命周期函数(如BeginPlay) | 必须与基类虚函数签名完全一致 | | `TArray&` | 返回批量查询结果(如射线检测到的物体)| 注意数组清空和预分配内存优化 | --- ### 七、**完整代码示例** ```cpp // 工具类声明 UCLASS() class UGameplayMath : public UBlueprintFunctionLibrary { GENERATED_BODY() public: // 静态工具函数:计算两点间距离(蓝图可直接调用) UFUNCTION(BlueprintCallable, Category="Math", meta=(DisplayName="CalculateDistance")) static float DistanceBetweenActors( const AActor* ActorA, const AActor* ActorB ); // 带输出参数的函数 UFUNCTION(BlueprintCallable) static void GetActorsInRadius( UObject* WorldContextObject, const FVector& Center, float Radius, TArray<AActor*>& OutActors // 输出参数 ); }; ``` 通过掌握这些关键词,您可以更高效地组织UE5代码结构,提升代码可维护性和蓝图交互能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值