UE4代码文件结构的正确配置
2016-11-21 21:33
295 查看
转载于[风之神韵老师 http://tieba.baidu.com/p/3177907400]
UE4代码文件结构的正确配置
昨天只做了一件事情,重新组织了源代码的文件结构。
为什么想起来做这样一件事情,因为我发现在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中添加这样一句:
[csharp] view
plain copy
PrivateIncludePaths.AddRange(
new string[] {
"YourGame/Private/UI",
}
)
好了这次我们只需要这样写#include "TestClass2.h",UBT编译的时候就能找到这些头文件了。
以上的例子看似简单,但工程复杂了,如果我们能组织好利用好自己的代码和这些功能,就可以使代码变得Nice and clean!
UE4代码文件结构的正确配置
昨天只做了一件事情,重新组织了源代码的文件结构。
为什么想起来做这样一件事情,因为我发现在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中添加这样一句:
[csharp] view
plain copy
PrivateIncludePaths.AddRange(
new string[] {
"YourGame/Private/UI",
}
)
好了这次我们只需要这样写#include "TestClass2.h",UBT编译的时候就能找到这些头文件了。
以上的例子看似简单,但工程复杂了,如果我们能组织好利用好自己的代码和这些功能,就可以使代码变得Nice and clean!
相关文章推荐
- UE4代码文件结构的正确配置
- Java实体添加字段 值没有进入数据库 hibernate配置文件正确 java代码正确
- OSWorkflow代码结构,配置文件及初始化
- 学会利用“配置文件”优化我们的代码结构
- 【代码优化】学会利用“配置文件”优化我们的代码结构
- osworkflow代码结构,配置文件及初始化
- 编译时出现:请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- GRUB配置文件的结构
- 编译时出现:请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- 关于struts结构中配置文件action forward的写法
- struts简单例子的分析(含代码注释和配置文件说明)
- Tomcat目录结构和配置文件说明
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- 转载:ini配置文件的代码实现
- 读取配置文件,简单代码
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
- ASP.NET 2.0 读取配置文件[INI](示例代码下载)
- Machine.Config Web.Config及配置文件层次结构和继承(转载)
- pagefile.sys文件(虚拟内存的正确配置)