文档章节

UE4代码规范

yintao
 yintao
发布于 2015/11/19 23:31
字数 943
阅读 333
收藏 2

命名部分

  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


© 著作权归作者所有

上一篇: 调试的艺术
下一篇: android学习
yintao
粉丝 7
博文 63
码字总数 45783
作品 0
大连
程序员
私信 提问
UE4随笔——TMap自定义结构体键值

在UE4中,TMap是一个比较常用的容器,TMap的用法很简单,本文将着重介绍一下TMap如何自定义结构体键值。 UE4随笔 和众多Map容器的实现方法类似,TMap也是通过将Key转换为Hash,来建立对Value...

Jay_Guo
2017/12/02
0
0
VR这么火,你选UE4还是Unity 3D?

在虚拟现实大热的今天,开发者界也出现了“甜豆花”与“咸豆花”之争。在游戏开发者制作游戏时,面对都是免费、都支持各大平台的UE4和Unity 3D,选择何种游戏引擎,似乎有点难以抉择,左手U...

1405048499729402
02/21
0
0
UE4如何获取/下载虚幻4(Unreal Engine4)源码

背景叨叨叨 之前受同事的影响,对UE4产生了迷之兴趣,想尝试着了解一下,于是在游戏蛮牛社区的UE4专栏找到了一篇新手入门引导教程,其中谈及下载源码,但是其推荐链接已无效便想到Github上找...

代码咖啡
2018/06/18
0
0
使用UE4制作简单的局域网对战小游戏

原帖地址:https://arcecho.github.io/2017/04/28/使用UE4制作简单的局域网对战小游戏/ 大多数文章都是只讲到大致的UE4网络的概念,并未涉及实际使用。事实上在使用的时候还是有很多要注意的...

qq_24835213
2017/05/06
0
0
UE4/Unity3d 根据元数据自动生成与更新UI

  大家可能发现一些大神讲UE4,首先都会讲类型系统,知道UE4会根据宏标记生成一些特定的内容,UE4几乎所有高级功能都离不开这些内容,一般来说,我们不会直接去使用它。   今天这个Demo内...

天天不在
2018/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
2
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部