首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

UE5学习路线推荐

  • 25-03-03 14:22
  • 2754
  • 6801
blog.csdn.net

虚幻引擎是个十分庞大且复杂的游戏引擎,想要掌握的话需要不断地学习和锻炼,那么如何从一个小白逐渐变成高手甚至将来成为业界的翘楚(我显然不是)呢,笔者将根据目前自身目前的学习方法和计划以及其他学长的指导和UE论坛等回答进行一个系统的总结和规划,希望能够帮助大家成为一个真正的虚幻大佬,嘿嘿嘿。

新手小白-初识引擎-虚幻引擎是啥子

1.学习引擎的编辑器使用

了解基础界面,应用设置,怎么在地图上摆放物体等基本操作

2.学习蓝图

3.学习引擎的各个功能模块:动画,AI,材质,UMG,网络,粒子等

4.学习配置下载插件

5.能力标志:做一个独立的小游戏(仅用蓝图还是比较容易达成的)

核心骨干-掌握引擎-原来虚幻引擎底层这么复杂

1.游戏里的一些模块可以用c++开始实现,例如函数库里实现计算逻辑

2.对一些特定模块可以开始用c++编写,战斗逻辑,AI

3.思考c++和蓝图如何更好结合的程序框架

4.开始收集整理一些常见的c++函数库

5.开始学会创建自己的插件

6.明确自己的专攻方向(只讨论程序)

AI,战斗逻辑,UI,动画等等

能力标志:c++和蓝图哪个方便使用(知道什么时候用蓝图什么时候用c++)

成为高手-懂得引擎-虚幻引擎也不过如此嘛

1.开始研究和理解引擎里模块的机制和原理

2.发现c++中一些不足之处和缺少的功能开始自己写支撑类和功能

3.发现并修复引擎中的bug

能力标志:对引擎的模块,都有信心可以找到源码并分析和扩展遗漏的功能,知道我想要哪个功能,我就能在对应的模块找到我想要的源码

通天代-超越引擎-UE已经是我的形状了

1.可以重写某个引擎的模块,做的甚至比引擎的作者还要更好

2.负责优化引擎来适配自己的项目

3.改造引擎的一部分,改造开发配套流程,有机高效融合进自己的工作流程

能力标志:将UE玩弄于股掌之间,看到全盘的结构,引擎只是我们项目的工具

成为行业的领航人物-创造引擎-原来被叫大佬是这种感觉

1.对引擎的整体结构了如指掌

2.可以站在整个引擎行业的高度创造更高生产力的工具

能力标志:没有参考

好了,说了这么多,我们现在就重点从c++的角度来给大家讲合理的学习路线,打开虚幻引擎的大门,走入真正的UE世界

1.什么是虚幻c++

扎实的标准c++基础能力

采用c++编写游戏逻辑

适用虚幻引擎底层的c++框架

  • Module配置和插件使用

  • UBT和UHT

  • 掌握Core模块的c++库:FString,TArray,UE_LOG

  • 熟练掌握CoreUObject:宏,GC,序列化

  • 熟悉c++和BP的交互

2.怎么判断我已经掌握了UEC++

  • 懂得解决各种编译链接错误,常常是因为Module出错

  • 懂得常见的编写套路:CreateDefaultSubObject,UPROPERTY

  • 理解UObject的内存管理机制,不会造成内存崩溃

  • 可以在源码里面找到自己想要的代码块

3.为什么要用c++开发UE的GamePlay,为啥不像unity一样用c#呢

  • 性能

  • 高端,将你主机里面的性能发挥到极致,这就是为什么UE适合做黑神话之类的3A大作

  • 更底层,可以优化项目

  • 可以做更大的项目,更方便管理

  • 更加开放,具有灵活的定制性,可以直接修改源码

  • 更容易迭代,不需要时时更新接口层

  • c++更复杂,更容易折磨程序员(bushi),c++上限非常高

4.只用蓝图不香吗,为什么要用c++呢

  • 方便拓展功能,直达引擎的底层结构

  • 更好的性能,性能优化

  • 方便调试引擎,更容易dBug

  • 蓝图都是别人做好的,用c++可以做自己想要的东西,可能别人没做蓝图的某个部分你这个方法就用不了了

  • 可以实现定制化的需求,且便于理解别人的插件的底层原理,大项目的话仅仅使用蓝图会非常复杂,难以管理

5.什么时候开始学习c++比较合适

  • 先把蓝图学明白

  • 熟悉引擎GamePlay框架概念,GameMode,ControlRig等等

  • 学会引擎的各模块功能,动画蓝图,AI,UMG,怎么骨骼绑定,怎么使用BlackBroad,行为树,组件,接口这些基础不能再基础的知识

6.So,你怎么判断自己蓝图有没有彻底学会呢

  • 蓝图太容易了,所以会被很多人忽视

  • 了解Actor,Pawn,Character之间是什么关系,是什么时候用接口,蓝图通信是什么,数据表怎么用,事件分发器是啥玩意,是什么时候自己创建组件,碰撞Overlap,Block有什么区别,怎么自己建通道检测,Niagara,还有什么常见的函数怎么使用,lerp,Interp,TimeLine,Sequence,flip flop这些,随便写了些

  • 当你用蓝图能做个很好的项目的时候,你差不多就已经掌握了

7.虚幻c++需要学习哪些内容(重点)

  • Core:虚幻c++文件夹里就有一个文件夹叫Core,包含了一些底层的c++源码

  • GamePlay

  • Module-UBT-c#

  • 反射-UHT

  • CoreUObject-GC

  • 常见套路,我这个玩法通常怎么写,这个模块通常怎么写,跟你数学题相似的题型套公式一样

下面我们来详细讲一下(写累死我了,开把王者先)

1.Core

  • 一定一定要把c++基础打牢,这非常重要,建议先学c++

  • 学到需要看懂以下内容:

  1. TArray(数组),TSet(集合),TMap(映射)等各种容器

  2. FString,FName,FText的操作互换

  3. TSharedPtr,TSharedRef,TWeakPtr等各种智能指针

  4. 理解Delegate,TAttribute,TSubClassOf的机制和用法

  5. 多看看设计模式,这样能用好FRunnable等多线程同步

  6. 好多好多宏,知道是啥

其实c++学完STL后就已经可以跟着UEC++两者共同学习了

2.GamePlay

  • Actor的创建,组装Component,BeginPlay,Tick,构造函数,事件绑定这些(都是套路,写来写去都是这些思路)

  • 引擎GamePlay对象的继承组织使用

  • UObject自定义对象的组织管理

  • 引擎数据对象的使用:Config,DateTable

  • 功能模块的c++层级编写(UMG,AI,动画)注意有机结合

这部分代码在GameFramework(在Engine文件夹下面的一个叫这个名字的文件夹里面)

3.Module-UBT-c#

  • 学会去链接模块,项目和插件可包含多个模块

  • UBT调用UHT生成代码,然后调用MSBuild编译代码

  • Build.cs是重点

UBT会使用c#收集.cs文件调用UHT来处理.h头文件或者是什么宏之类的,没错,UE也会用c#,具体的方法,本文不是讲解就不再赘述

ModuleRules.cs-模块链接

  • PublicDependencyModuleNames

public链接的模块名称,最常用

在自己的public和private里面包含对方的public

  • PrivateDependencyModuleNames

private链接的模块名称,只引用不暴露

在private里包含对方的public,不扩充自己的public

  • DynamicallyLoadedModuleNames

动态链接的模块名称,在runtime被ModuleManager加载,保证先编译

举个例子:

在你的Game文件夹的.build.cs中

  1. using UnrealBuildTool;
  2. public class FPSWithCPP : ModuleRules
  3. {
  4. public FPSWithCPP(ReadOnlyTargetRules Target) : base(Target)
  5. {
  6. PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
  7. PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" ,"Niagara" ,"AIModule","NavigationSystem","GameplayTasks","UMG"});
  8. }
  9. }

一个模块下面通常有public和private文件

你用的模块想给别人用通常用public

然后在头文件中#include你加进去的模块,类似#include"GameFramework/SpringArmComponent.h"

4.反射-UHT

  • 理解.generate.h和gen.cpp

  • 理解MODULENAME_API的含义,常见的犯错地方

  • 掌握宏的反射和用法

UCLASS

USTRUCT UENUM UPROPERTY UFUNCTION UINTERFACE GENERATED_BODY()

  • 理解类型和对象的关系 object reference和class reference

  • 理解UClass,UScriptStruct,UField,UFunction

  • 通过反射遍历对象函数

5.CoreUObject-GC

  • GC-垃圾回收

  • CDO:理解类型和对象实例化,模板

1.理解classDefaults作为模板的作用

2.理解CDO在序列化中的意义作用

  • Package:理解对象的相互组织方式

1.对象可以包含子对象

2.序列化时,把一系列对象用一个对象包起来,这个对象叫包

3.package也可以互相引用

6.常见套路

套路一
  • UHT的套路:宏

  • 模块连接的套路:几个常用属性.AddRange

  • Actor创建的套路:

ConstructorHelpers

CreateDefaultSubobject

SetupAttachment

  • GamePlay继承的套路

尽量不要在蓝图里面写逻辑

想要结构良好,尽量遵循引擎结构

GI,GM,GS,PC,Pawn,PS,继承(GameInstance,GameMode,GameState,PlayerControl)

遵循推荐结构,会发现支持拓展和支持联机

套路2

c++BP交互的套路:

  • UPROPERTY,UFUNCTION

  • C++定义基类写逻辑,蓝图继承配置可视化是种易扩展高性能的方法

  • 函数库是个好东西

事件绑定的套路:

  • DELEGATE,MULTICAST_DELEGATE,EVENT,DYNAMIC

  • input:BindAxis,BindAction

  • Collision:Hit,Overlap,AddDynamic

  • Slate&UMG Event:SLATE_EVENT(FOnClicked,OnClicked)

  • FTimerManager

引擎常用方法的套路
  • Engine/class/Kismet有好多库

  • Gameplaystatics很常用,可以访问GamePlay的很多对象

  • UKismetSystemLibrary,系统目录等功能,LineTrace

  • UKismetMathLibrary,数学

8.学习虚幻c++有哪些难点呢

  • C++基础太弱

  • 数据结构,操作系统这些没学明白(学校里面的东西要好好学)

  • 数学不行啊

  • 装备库太少:渲染,动画,AI...(武功高手从来不只会一个武功)

  • 没有项目开发经验,不知道如何去搭一个好的游戏框架

  • 知识要点太多:一堆宏,API(别看我,我也记不住)

  • 看代码能力不足,别人写的看不懂(emmm)

9.怎么学习虚幻c++呢

模仿

  • 先模仿,模仿模版项目,比如第一人称项目,你自己写能不能写的和它一样

  • 看别人写的项目和源码,但是写的质量可能参差不齐

  • 上网看教程

自己动手改改试试(随便玩玩引擎)

  • 自己改改一些地方观察变化

  • 自己尝试着用套路写功能

总结规律

  • 养成记学习笔记的好习惯

善于积累

  • 可以弄个测试项目,用一个小场景测试想要的功能

  • 将有用的代码块,通过插件函数库封装起来,能够在项目之间复用

  • 对于概念可以画思维导图,理解关系和区别

  • 尝试自己画流程图

自己尝试项目实践

9.不要对蓝图或c++有任何偏见!!!

不要听到有人说什么写蓝图根本不懂游戏开发,只会像个小孩子一样连连看,也有人说用c++那么麻烦,看的头都大,我想说的是两者都是工具,每个方法都有自己的优点和缺点,我们需要扬长避短,不是工具的错误。

但是有些东西其实根本不需要去学,UE你也学不完,所以确定一个方向是非常重要的,要有清晰的规划和学习路径。

10.蓝图和c++在实际游戏开发中的配比

  • 偏向引擎底层,偏向性能,偏向稳定的,使用c++

  • 偏向表现层,偏向经常操作,偏向多变的,使用蓝图

11.其他

  • 用插件在项目之间共享代码

  • 变量类型尽量偏向抽象基类,比如UStaticMeshComponent和UPrimitiveComponent

  • 善用c++前置声明,减少对include依赖,加快编译

  • 善用蓝图函数库

  • c++代码里面不要写数据配置,尝试数据驱动,C++->BP->DataTable

  • c++定义基类,蓝图继承

  • 没有C++基类的蓝图类,也可以reparent基类,用CoreRedirects修复

  • 如果可以不改引擎,尽量不改

  • 在改动的时候标上宏或者注释,以后merge方便

12.可能比较常见的概念

  • GEngine:

从GEngine可以开始获得Worlds,游戏播放和编辑的场景也是个World

获取游戏视口进行slate叠加或截图

  • GEditor

可以获得当前选择Actor等有用信息

可以获得当前视口

可以调用编辑器功能

可以获得事件回调

不想写了。。。关注笔者博客,笔者会不定时更新

13.源码剖析

  • 时空观

时:注重时间上的先后,观察函数的调用流程,事件的触发时机,(这个实现的顺序是什么)

空:注重数据的吞吐转换,观察信息的采集,数据的加工消化利用(这个实现需要哪些数据,这些数据有什么用)

时空的交互,组成了有机的功能架构支撑,调度起资源,启动内循环,响应外部刺激

  • 从开始到结束

一开始有哪些东西?开始的源头是什么?后续又是怎么继续实现的?这个模块向外传输了哪些数据?

  • 比好奇心更重要的是保持耐心

有的时候常常迷惑这是干什么的

不理解这么做,有什么用意

调用的链条太长,自己脑子一下子记不住这么多东西

代码调来调去,不知所云.........

学习资源(个人推荐)

UE官方文档:https://dev.epicgames.com/documentation/zh-cn/unreal-engine/unreal-engine-5-5-documentation

【2024 UE5.4虚幻C++游戏开发入门-哔哩哔哩】 https://b23.tv/dHmEt0a

油管上的,非常全面,包含常用套路:https://unrealcpp.com/

虚幻引擎国区总监,大佬中的大佬:https://www.zhihu.com/people/fjz13

【《UE4C++入门到精通合集》-哔哩哔哩】 https://b23.tv/JwiWJbu

讲了这么多,大家可能一听就有点望而却步,可是这也恰恰是学习的乐趣,就和你玩老头环一样,一开始手忙脚乱的,但是越到后面你的装备越好,你的技术不断提高,你也会逐渐感受到乐趣。最后送给大家一句话:披星戴月走过的路,终将会繁花满地,大家一起加油,我也会不断进步,ciallo~

注:本文转载自blog.csdn.net的纯情中二少年的文章"https://blog.csdn.net/2301_81893326/article/details/144358526"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

139
资讯
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top