查看: 467|回复: 9

UE4代码文件结构的正确配置-风之神韵

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2015-9-30 21:19:28 | 显示全部楼层 |阅读模式




为什么想起来做这样一件事情,因为我发现在include头文件时,遇到了很多麻烦。 比如,你写一个FTestClass类放到TestClass.h头文件中,这时候要在对应的CPP文件中实现它,首先要包含头文件TestClass.h,否则出错。但是,我发现官方给出的实例并没有包含头文件这个步骤,并且编译通过。

上面是一个小问题,还有更麻烦的,如果我们在某个子文件夹中SubDir创建一个TestClass1.h,而如果在上一层目录想引用这个子目录的头文件,需要这样写:#include Dir/TestClass.h 。这在平时C++工程中很常见,但是目录多了层次深了,同时引用多的情况下,这种include就会慢慢的变得复杂起来。

官方实例当中并不存在这些问题,原因是UBT有着特殊的识别查询头文件功能。
首先UE4要求我们组织自己的代码文件是要有特殊的目录结构的:Source/YouGame文件夹下要按照规定创建三个文件夹,Classes,Private,Public。Classes主要存放UObject类型的.h文件,Private则对应着放它们的.cpp文件。Public存放外部Moudle可以引用的.h或者.cpp文件。
举个例子,YouGame.h这个里面定义了自己的Module,而且需要其他的Module来引用,那就得放到Public下。YourGameMode.h这种最终继承自UObject的类可以放到Classes中,此时在Private中创建YourGameMode.cpp的时候就可以不必包含YourGameMode.h直接实现。还有不要忘记在YourGameMode.h中包含 YourGameMode.generated.h 这个很关键。

那么那些没有继承UObject的类如何处置,答案是放到Private中。那么比如我有一个TestClass2.h不是继承UObjcet,并且放到Private/UI中,同时.cpp文件也放到Private/UI中,那么你在引用的时候就必须Include TestClass2.h 。
如果此时在Private/Player中有个头文件要引用TestClass2,那么你必须#include UI/TestClass2.h ,这样很麻烦。要想简单些,需要来到YourGame.Build.cs中添加这样一句:

PrivateIncludePaths.AddRange(   new string[] {      YourGame/Private/UI , }
)
  好了这次我们只需要这样写#include TestClass2.h ,UBT编译的时候就能找到这些头文件了。
以上的例子看似简单,但工程复杂了,如果我们能组织好利用好自己的代码和这些功能,就可以使代码变得Nice and clean!

微信订阅号搜索“风之神韵”,关注随时获取更多教学信息。
http://i.youku.com/u/UMTE5MzA2NDA0
raydEx 发表于 2014-11-24 23:00
Classes,Private,Public的目录结构有什么好处?我现在自定义了一些目录结构,放弃了前面3个目录貌似也能正 ...
严格按照官方给出的例子 来组织cpp .h文件可以提高编译速度,减少头文件的重复引用。因为UBT有这么一套对目录识别的功能,那你就最好按照他的规则来。
微信订阅号搜索“风之神韵”,关注随时获取更多教学信息。
http://i.youku.com/u/UMTE5MzA2NDA0
我通常只将 YourGame.h 放在public目录,其它的头文件全部转移到Classes目录,这样做的好处是UHT会帮你额外生成一个 YourGameClasses.h 文件,然后你只要在 YourGame.h 包含一下 #include VehicleLabsClasses.h 就行了。。。以后任何的cpp中,你只要 #include YourGame.h 一个文件即可。

回复

使用道具 举报

0

主题

829

帖子

2772

积分

vip会员

Rank: 1

积分
2772
发表于 2015-10-12 23:45:08 | 显示全部楼层
我死了,但是在烈火中我又站起来了,你猜是涅磐,还是尸变?   
回复 支持 反对

使用道具 举报

0

主题

849

帖子

2751

积分

vip会员

Rank: 1

积分
2751
发表于 2015-10-13 01:01:50 | 显示全部楼层
真是汗啊  我的帖子好少啊  加油  
回复 支持 反对

使用道具 举报

diorazole 该用户已被删除
发表于 2015-10-13 01:15:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

907

帖子

2985

积分

vip会员

Rank: 1

积分
2985
发表于 2015-10-13 01:16:50 | 显示全部楼层
要做一件事,成功之前,没必要告诉其他人,成功之后,和他们分享快乐   
回复 支持 反对

使用道具 举报

0

主题

833

帖子

2759

积分

vip会员

Rank: 1

积分
2759
发表于 2015-10-13 03:27:59 | 显示全部楼层
我帮不了你  
回复 支持 反对

使用道具 举报

0

主题

893

帖子

2982

积分

vip会员

Rank: 1

积分
2982
发表于 2015-10-13 06:00:29 | 显示全部楼层
真是汗啊  我的帖子好少啊  加油  
回复 支持 反对

使用道具 举报

0

主题

1254

帖子

3934

积分

vip会员

Rank: 1

积分
3934
发表于 2015-10-13 07:39:24 | 显示全部楼层
要不我崇拜你 行吗   
回复 支持 反对

使用道具 举报

0

主题

874

帖子

2868

积分

vip会员

Rank: 1

积分
2868
发表于 2015-10-13 13:12:25 | 显示全部楼层
慢慢来,呵呵  
回复 支持 反对

使用道具 举报

0

主题

893

帖子

2970

积分

vip会员

Rank: 1

积分
2970
发表于 2015-10-13 16:11:32 | 显示全部楼层
搞笑  哈哈   
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部