UE4代码规范

命名部分

  1. 函数名,变量名,类型名,首字母大写。eg:UPrimitiveComponent

  2. 类型名有一个额外的大写字母前缀。

  •     模板类以T为前缀。eg:TArray

  •     继承UObject的类以U为前缀。eg:UActorComponent

  •     继承AAtor的类以A为前缀。eg:AMyActor

  •     继承SWidget 的类以S为前缀。eg:SPage

  •     抽象接口类以 I为前缀。eg:IGetName

  •     大部分其他类都以F为前缀。eg:FString

3.变量如果是bool,则必须以b开头。eg:bFinished

4.返回bool的函数,必须是Is开头或Should开头。eg:IsVisable(),ShouldClearData()

5.函数的参数,如果需要修改,必须以Out开头。eg:void GetRoomInfo(FRoomInfo& OutRoomInfo);

6.类型名要与类型修饰符在一起。eg: AActor* player;

可移植数据类型部分

  •     bool代表布尔值 (永远不要假设布尔值的大小) 。BOOL 将不会进行编译。

  •     TCHAR 代表字符型(永远不要假设TCHAR的大小)。

  •     uint8代表无符号字节(占1个字节)。

  •     int8代表有符号的字节(占1个字节)。

  •     uint16 代表无符号"短整型" (占2 个字节)。

  •     int16代表有符号"短整型" (占2 个字节)。

  •     uint32 代表无符号整型(占4字节)。

  •     int32代表带符号整型(占4字节)。

  •     uint64代表无符号"四字" (8个字节)。

  •     int64 代表有符号"四字"(8个字节)。

  •     float代表单精度浮点型 (占4 个字节)。

  •     double代表双精度浮点型 (占8 个字节)。

  •     PTRINT代表可以存放一个指针的整型 (永远不要假设PTRINT的大小)。

    请不要在可移植代码中使用C++整型,因为需要根据编译器决定这种数据类型的大小。

C++11可以使用的特性

    可变参数宏

    auto

    范围for

    lambda

    override final

    其余禁止使用

C++ 枚举值(命名空间作用域)

    在虚幻引擎的代码中我们一般会在枚举类型前面加上 "E"字符作为前缀。

    我们要求所有枚举类型都使用命名空间来 (或空的结构体) 确定作用域。这样做的原因是在C++中枚举值的作用域和枚举类型本身的作用域一样。这样可能导致命名冲突,使得程序员必须创建奇怪的名称或者给枚举值加上前缀使它们的值保持唯一性。相反,我们通常会使用命名空间来规定新的枚举类型的作用范围。命名空间内的实际枚举类型的名称应该总是声明为 "Type" 。

    通过命名空间确定枚举类型作用于的示例:

/** 定义命名空间内的枚举来完成C#-样式的枚举范围 */
namespace EColorChannel
{
    /** 按照此枚举的实际类型来声明EColorChannel::Type */
    enum Type
    {
        Red,
        Green,
        Blue
    };
}
/** 给定颜色通道,返回该通道的名称。*/
FString GetNameForColorChannel(const EColorChannel::Type ColorChannel)
{
    switch(ColorChannel)
    {
        case EColorChannel::Red:   return TEXT("Red");
        case EColorChannel::Green: return TEXT("Green");
        case EColorChannel::Blue:  return TEXT("Blue");
        default:                   return TEXT("Unknown");
    }
}

    注意对于局部声明的枚举类型来说,您不能使用命名空间来规定作用范围。在这些情况中,我们选择声明一个没有成员变量的局部结构体,该结构体内仅有一个局部的枚举类型,使用该结构体来规定作用范围。

/** 使用结构体定义本地作用的枚举*/
class FObjectMover
{
public:
    /** 待移动的方向 */
    struct EMoveDirection
    {
        enum Type
        {
            Forward,
            Reverse,
        };
    };
    /** 构建具有特定移动方向的FObjectMover */
    FObjectMover( const EMoveDirection::Type Direction );
}

依赖部分

    使用#pragma once来防止多次包含

字符串

    使用unreal自带的FString,FText,TCHAR

容器

    使用unreal自带的容器TArray,TMap,TSet

智能指针

    使用unreal自带的智能指针TSharedPtr,TSharedRef,TWeakPtr


转载于:https://my.oschina.net/xunxun/blog/532964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值