取消Win11的右键菜单展示更多选项
管理员权限运行Cmd
输入下面指令
1 | reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve |
禁用VSCode的预览模式
打开 VSCode
设置:按下Ctrl +
,(Windows/Linux)或 Cmd + ,(Mac)。
搜索 workbench.editor.enablePreview。
取消勾选此选项(或设置为 false)。
加快UE的Editor启动和游戏启动
1 | wp.CrashSight.MatrixMemoryStatEnableWin=False |
UE的Cursor Rules
1 | # 虚幻引擎C++代码风格规则 |
GENERATED_BODY()
类型别名定义 (using或typedef)
// 变量部分 (从private到public)
private:
// 非UPROPERTY变量
<非UPROPERTY标记的变量>
// UPROPERTY变量
UPROPERTY(...)
<UPROPERTY标记的变量>
protected:
// 非UPROPERTY变量
<非UPROPERTY标记的变量>
// UPROPERTY变量
UPROPERTY(...)
<UPROPERTY标记的变量>
public:
// 非UPROPERTY变量
<非UPROPERTY标记的变量>
// UPROPERTY变量
UPROPERTY(...)
<UPROPERTY标记的变量>
// 函数部分 (从public到private)
public:
// 构造函数和析构函数
<构造函数和析构函数>
// UFUNCTION函数
UFUNCTION(...)
<UFUNCTION标记的函数>
// 虚函数重写
virtual void Function() override;
// 普通函数
<非虚函数且非UFUNCTION的函数>
protected:
// UFUNCTION函数
UFUNCTION(…)
<UFUNCTION标记的函数>
// 虚函数重写
virtual void Function() override;
// 普通函数
<非虚函数且非UFUNCTION的函数>
private:
// UFUNCTION函数
UFUNCTION(…)
<UFUNCTION标记的函数>
// 虚函数重写
virtual void Function() override;
// 普通函数
<非虚函数且非UFUNCTION的函数>
1 |
|
- 委托定义:
- 全局委托定义应放在类外,generated.h文件后空几行添加
- 类内委托定义应与其UPROPERTY实例一起放置
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 全局委托定义
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnGameStartEvent);
UCLASS()
class EXAMPLE_API UMyClass : public UObject
{
GENERATED_BODY()
public:
// 类内委托定义和实例
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnItemSelectedEvent, int32, ItemID);
UPROPERTY(BlueprintAssignable, Category = "Events")
FOnItemSelectedEvent OnItemSelected;
};
属性声明规则
非UPROPERTY成员变量:
- 注释放在变量同一行且位于变量后面
- 变量可以按功能分组,组之间使用空行隔开
- 同组内的变量类型、变量名和注释应对齐
1
2
3
4
5
6
7
8private:
// 数据相关变量
FTextBlockStyle CommandTextStyle; // 命令文本样式
TArray<FCommandConfig> ConfigArray; // 配置数组
// UI组件相关变量
TSharedPtr<class SButton> ConfirmButton; // 确认按钮
TSharedPtr<class STextBlock> ButtonText; // 按钮文本
UPROPERTY成员变量:
- 注释放在UPROPERTY宏上方
- 属性应按功能分组
1
2
3
4
5
6
7
8private:
// 玩家基础属性
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "玩家属性")
float MaxHealth;
// 当前生命值
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "玩家属性")
float CurrentHealth;
函数声明规则
UFUNCTION标记函数:
- 注释放在UFUNCTION宏的上方
- 所有UFUNCTION宏标记的函数应放在一起
1
2
3// 处理按钮点击事件
UFUNCTION(BlueprintCallable, Category = "UI事件")
void HandleButtonClicked();
虚函数重写:
- 虚函数重写应放在UFUNCTION函数后面
- 如果函数同时有UFUNCTION标记和override,则归类为UFUNCTION函数
1
2// 在销毁前释放资源
virtual void BeginDestroy() override;
普通函数:
- 具有相同功能的函数应放在一起,并使用注释分组
- 注释放在函数声明同一行的后面,并应对齐
1
2
3
4
5
6
7// UI相关函数
void InitializeComponents(); // 初始化组件
void UpdateUI(); // 更新UI显示
// 事件处理函数
FReply HandleHistoryButtonClicked(); // 处理历史记录按钮点击
FReply HandleSearchButtonClicked(); // 处理搜索按钮点击
代码格式规则
大括号:
1
2
3if (bIsValid) {
DoSomething();
}缩进: 使用4个空格
空行: 函数之间使用一个空行分隔
注释规则
类注释:
1
2
3/**
* 玩家角色类 - 处理玩家输入和状态
*/函数注释:
UFUNCTION标记的函数:注释放在UFUNCTION上方
1
2
3// 更新角色健康状态并检查是否死亡
UFUNCTION(BlueprintCallable)
void UpdateHealth(float DeltaHealth);普通函数:注释放在函数声明同一行后面,并对齐
1
2void UpdateUI(); // 更新UI显示
FReply HandleButtonClicked(); // 处理按钮点击
变量分组注释: 使用单行注释标识变量组
1
2
3// UI组件引用 - Slate实现部分
TSharedPtr<class SVerticalBox> MainVerticalBox; // 主垂直布局盒子
TSharedPtr<class SHorizontalBox> TabButtonsBox; // 标签按钮水平布局盒子函数分组注释:使用单行注释标识功能相关的函数组
1
2
3// UI构建函数
void BuildTabButtons(); // 构建标签按钮
void BuildMainLayout(); // 构建主布局
蓝图交互规则
类标记:
1
UCLASS(Blueprintable, BlueprintType)
属性标记:
1
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "属性")
函数标记:
1
UFUNCTION(BlueprintCallable, Category = "功能")
内存管理规则
使用智能指针:
1
TSharedPtr<FMyClass> MyObject;
正确释放资源:
1
virtual void BeginDestroy() override;
性能优化规则
- 避免在Tick中执行重型计算
- 使用委托代替轮询
- 使用异步加载大型资源
网络复制规则
标记需要复制的属性:
1
2UPROPERTY(Replicated)
float Health;实现复制函数:
1
void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
调试支持规则
使用适当的日志级别:
1
UE_LOG(LogCategory, Log, TEXT("玩家%s加入了游戏"), *PlayerName);
使用断言确保条件:
1
check(Player != nullptr);