工程目录文件
.vs VS环境配置文件(不用管不要删)
Binaries 存放编译生成的结果二进制文件。该目录可以gitignore(可以忽略),每次都会生成
编译动态库 中间编译文件(虚幻按模块编译)(编译好的)
每个模块会产出一个动态库
当工程出了一些问题(热加载出问题),就把动态库全删掉重新生成
config 配置文件
content 内容文件夹,所有资源和蓝图等都在该目录里
intermediate 中间文件(gitignore),存放着一些临时生成的文件,有:
1.build的中间文件,.obj和预编译头等
2.UHT预处理生成的.generated.h/.cpp文件
3.VS.vcxproj项目文件,可通过.uproject文件生成编译生成的shader文件夹
4.AssetRegistryCache:Asset Registry系统的缓存文件
(Asset Registry可以简单理解为一个索引了所有uasset资源头信息的注册表)
(CachedAssetRegistry.bin文件也是如此)
saved 存储自动保存文件,其他配置文件,日志文件,引擎崩溃日志,硬件信息,烘培信息数据等。gitignore
source 源码文件夹(工程源码)
.sln VS启动文件
.uprojece
.VC.db
VS项目目录结构
1.Engine引擎源码文件(只读)(不完整),虚幻是开源项目我们可以直接在工程中看到引擎源码但是无法修改。如需修改需下载Git源码工程
2.Games项目工程文件(主要编写逻辑文件),我们的代码需要在此工程中编写。虚幻中采用了编译模块方式进行引擎构建,所以对于引擎来说,我们编写的内容只是一个模块,模块会被动态编译成库文件,加载到引擎中使用。Target.cs就是模块配置文件
3.Visualizers虚幻4.21加入的文件夹,VS编辑器配置文件
编译类型
状态 | engine | game | 其他 |
debug(调试)(可查看信息更多,牺牲一些CPU和GPU事件来收集信息) | debug |
debug | 必须在编译器上加-debug参数才能反射查看代码更改 |
debuggame(调试游戏) | release | debug | 适合只调试游戏代码 |
development(开发)(一般用这个) | release | release | 允许编辑器发射查看代码更改 |
shipping(发行)(性能最优) | release | release | 无控制台命令,统计数据和性能分析 |
test(测试) | release | release | 启用了一些控制台命令,统计数据和性能分析 |
目标 | |
空白 | 不带编辑器的一个独立可执行版本,需要提前打包烘培内容资源 |
editor(编辑器) | 直接在编辑器里打开游戏项目 |
client(客户端) | 多人联机项目,生成客户端版本,需要提供<game>client target.cs文件 |
server(服务器) | 多人联机项目,生成服务器版本,需要提供<game>server target.cs文件 |
命名规则
变量命名规则
1.模板类以T作为前缀,比如TArray,TMap,TSet
2.UObject派生类都以U前缀
3.AActor派生类都以A前缀
4.SWidget派生类都以S前缀(组件)
5.全局对象使用G开头,如GEngine
6.抽象接口以I前缀
7.枚举以E开头,结构体都是以ST开头
8.bool变量以b前缀,如bPendingDestruction
9.其他的大部分以F开头,如FString,FName
10.typedef的以原型名前缀为准,如typedef TArray FArrayofMyTypes;
11.在编辑器里和C#里,类型名是去掉前缀过的
12.UHT在工作的时候需要你提供正确的前缀,所以虽然说是约定,但你也得必须遵守(编译系统怎么用到那些前缀,后续再讨论)
UE遵循帕斯卡命名法则
虚幻里没有多继承,有接口
资源命名规则
类型 | 前缀 | 说明 |
Level/Map | L_ | 关卡 |
Blueprint | BP_ | 常规蓝图 |
Material | M_ | 材质 |
StaticMesh | S_ | 静态网格体 |
SkeletalMesh | SK_ | 骨骼网格体 |
Texture | T_ | 纹理 |
ParticleSystem | PS_ | 粒子系统 |
WidgetBlueprint | WBP_ | 组件蓝图 |
文件夹命名规则
|--项目名称
|-- Maps
|-- Textures
|-- Blueprints
|-- Effects (particle)
|-- Animations
|-- Sounds
|-- Sources
我们建议,在引擎根目录进行细致的命名分化。以打到高效管理资产的目的,命名应遵循清晰,准确,简短的描述分类内容。尽量不要使用模糊描述。项目名称作为最顶层文件夹名称
命名规范网站
https://github.com/uejoy/ue4-style-guide
Actor相关
UE游戏世界中存在元素的根源,用来表示世界中的任何物体的高级抽象类,由Actor进行创建,Component进行行为组件,完成整个游戏世界的元素展示
Actor是一个载体,Component组件是能力
Acotr的创建方式为两种,第一种为直接在场景中编辑拖拽(静态创建),优势无需编码,更加直观简单,缺点可能影响游戏启动速度,增加场景构建负担。第二种为通过编码动态进行生成(动态创建,例如扔手雷)相对于前者复杂度上升,但可控性更强,动态生成的Actor会持有有效的操作指针,我们可以根据实际情况进行生成,更加灵活
SpawnActor函数
在蓝图中我们借助SpawnActorOfClass进行动态生成Actor,在C++中我们需要通过UWorld指针进行创建。在UWorld类中,我们可以找到多个生成Actor的函数。对于重载函数,我们根据特定的情况进行选择即可。SpawnActor函数是个工厂函数,下面地址中可以查到UWorld的相关API
http://api.unrealengine.com/INT/API/Runtime/Engine/Engine/UWorld/index.html
API——用户接口手册(描述类的结构)