UE4(一)- 源码分析起点

06/21/2020

UE4文件结构

现在UE4游戏引擎现在都很简单,可以从Epic Games Launcher启动器中直接下载不同版本的UE4。我下载了版本是UE_4.24版本,双击打开文件夹,里面的结构是见图
UE_4,24文件结构
FeaturePacks,Samples和Templates是由UE4制作的一些模板和样本,比如有第三人称设计游戏等等,我们主要关注Engine文件夹里面内容
打开Engine文件夹
UE_4.24Engine文件夹
UE4 我们都知道是开源的,源码放在Source文件夹中,游戏引擎还提供了做好的游戏资源给我们,比如材质,纹理和模型,放在了Content里面。打开Source文件夹
UE.4_24Engine下Source文件夹内容
这里面包含了UE4游戏引擎的源码,主要分为5大内容,有Developer,Editor,Programs,Runtime,ThirdParty,游戏引擎核心代码放在Runtime中,相当于main的启动过程,和初始窗口和显卡部分,因为UE4是跨平台的,各个平台之间肯定有不同的地方。
打开UE4,创建一个C++项目。

UE4 Editor

UE4C++创建
当项目创建启动,它会默认打开默认的IDE,我设置的是VS2019,进而打开了UE4游戏引擎编辑器(Editor)窗口
U
UE4Editor

UE4 C++ 项目文件夹结构

UE4.24_C++MyProject文件夹
我使用VS2019打开MyProjct.sln文件,也可以开启编译并显示处UE4Editor可视化窗口

UE4 源码分析的起点

UE4Engine
再一次看到UE4Engine文件夹,我们就可以从这里开始阅读UE4源码

项目中的main函数

从上述项目中MyProject2里面Source文件夹中会先运行MyProject2.cpp 里面的函数再运行MyProject2GameModeBase.cpp

//MyProject2.h
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, MyProject2, "MyProject2" );

//MyProject2GameModeBase.h
UCLASS() class MYPROJECT2_API AMyProject2GameModeBase : public AGameModeBase
{
   
	GENERATED_BODY()
	
};

UObject 继承树1

AGameModeBase继承树

注意:UObject属于比较上层的,而自己创建的项目是AGameModeBase

Gameplay类:Objects,Actors,Componets

UObject继承图

  父类 Class UObject
  	一级派生Class UActorComponent 角色组件
  		子类有:
  		1.Class UInputComponent 输入组件
  	 	2.Class UMovementComponent 移动组件
   	 	3.Class USceneComponent 场景组件
   	二级派生Class USceneComponent 包含Transform
   		子类有:
    	1.Class UPost ProcesComponent 处理效果
    三级派生Class UPrimitiveComponent 图源(Render 渲染 Physical 物理计算)
    	子类有:
  		1. Class UMeshComponent 网格组件
        	(1).Class UStatic MeshComponent 静态网格组件
            	a.Class UStatic Mesh 网格实例

        	(2).Class USkinned MeshComponent 皮肤网格组件
            	b.Class USkeleta MeshComponent 骨骼网格组件
                	b1.Class USkeleta Mesh 骨骼实例

   		2.Class UBrushComponent 笔刷组件
    	3.Class ULandscapeComponent 场景组件
      	4.Class ULightComponent 灯光组件
        	(1).Class ULightComponent Base 灯光大类组件
            	a.Class ULightComponent 光源组件
                	a1.Class UDirect LightComponent 平行光组件
                	a2.Class UPoint LightComponent 点光源组件
                    	a2_1.Class USpot LightComponent 射光源组件
            	b.Class USky LightComponent 天空光组件

    	5.Class UShapeComponent 形状组件
        	(1).Class UBoxComponent 正方体组件
        	(2).Class UCapsuleComponent 胶囊组件
        	(3).Class USphereComponent 圆柱组件

    	6.Class UAudioComponent 音频组件
    	7.Class UCameraComponent 摄像头组件

Launch文件夹:引擎的起点

不同平台的Main函数

最近使用Direct3D在windows下完成了一款简易游戏,但现在我需要把这个游戏跨平台到PS4上,所以我需要了解一些跨平台的知识。在Engine/Source/Runtime/Lanuch/Lanuch.cpp中有关如何启动不同平台的main函数 - GuardedMain
UE4_Lanuch文件夹
查看Lanuch.cpp 找到GuardMain函数
UE4_Launch文件
这里有关于如何区分Windows和其他平台的方法,用的是宏定义,Windows就是和其他平台不一样,单独需要有一个main函数呢

注意:Launch文件夹表示引擎的起点

跨平台方法之一(宏定义if-else-endif)

//Launch.h   ------ Main 函数
#if PLATFORM_WINDOWS
int32 GuardedMain(const TCHAR* CmdLine,/*....HINSTANCE hInInstance ...*/) //绕不开的HINSTANCE
#else
int32 GuardedMain(const TCHAR* CmdLine,/*....*/)
#endif
{
   

//....
EnginePreInit(CmdLine); 
  • 12
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值