UE4游戏客户端开发进阶学习指南
前言
两年多前写过一篇入门指南,教大家在短时间内快速入门UE4的使用,在知乎被很多人收藏了。如今鸡佬使用UE快三年了,是时候更新一下进阶版本的学习指南。本文对于读者的要求:
- 有一定的C++基础
- 已经入门UE,能够用蓝图和C++做一些简单的功能
对于学习资料,首先本文列举的所有学习资料都是鸡佬经过精挑细选的,会综合考虑文章质量、学习难度、重要性等各个维度。其中会分为必修和选修两个部分。必修是很重要且强烈推荐看的学习资料。选修的话,有些学习难度比较大,有些相对来说不是那么重要。推荐的学习顺序是先把必修的全部看完,再根据个人需要学习选修部分的资料。
框架图解
在深入学习UE之前,需要对UE包含哪些东西有一个大概的了解。正好UE官方自己曾出过一个关于UE各个模块的引擎架构图,是非常好的学习资料。如下图是Character模块的部分架构图。全模块完整架构图见Gitub地址。

Programming
必修
官方文档——编程与脚本编写
UProperty关键字全说明
《InsideUE4》UObject类型系统-反射实战
选修
深入蓝图开发——理解蓝图架构
深入蓝图开发——理解异步节点
一文搞懂StaticClass、GetClass和ClassDefaultObject
一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass
《InsideUE4》UObject类型系统系列
这个模块选择了一些C++编程和蓝图开发相关的资料。对于蓝图和UE的UObject整个框架的理解将帮助你更好的开发上层玩法系统。另外还加了一个UProperty关键字的说明文章,方便查阅。
GamePlay
必修
《InsideUE4》GamePlay架构系列
GAS入门
官方文档——GAS
GAS各个模块的介绍和使用
选修
移动组件源码解读
GAS预测机制讲解
这个模块是玩法相关的学习资料。首先要做的肯定是配合前面的框架图来理解UE的GamePlay架构。然后就是学习GAS(Game Ability System)了,即UE的技能系统。虽然GAS叫作技能系统,但是可以使用的地方远远不止角色技能。比如一局pvp游戏阶段的切换也是可以用GAS来做的。可以说满足需要复制、可以用Tag表示状态、有开始和结束时机的一切事情都可以考虑用GAS来实现。
Animation
必修
官方文档——骨骼网格动画
深入浅出学习ALS高级运动系统视频教程
选修
过场动画Sequencer系列教程
UE4/UE5 动画的原理和性能优化
RootMotion原理分析
动画蓝图的初始化和更新流程解析
动画方面还是一样先看官方文档,然后是ALS的视频教程。ALS高级运动系统,是UE的一个动画插件,实现了3A级别水准的走跑跳蹲的各种基础移动姿势,以及换武器、攀爬、八方向移动、IK等各种动画相关的功能,而且是纯蓝图实现的。学习ALS能够对UE的动画蓝图能够做什么功能以及怎么做有一个非常清晰的了解。基本上你跟着第二个视频教程完整学一遍,UE动画蓝图的所有功能你就可以掌握了。选修部分包含了一个制作过场动画的教程(一般客户端涉及这方面的需求比较少有需要再看),还有动画底层的实现细节源码解析(比较难懂,根据个人需要学习)。
UI
必修
UMG各个控件使用讲解
- CanvasPanel、HorizontalBox、Overlay、UniformGrid Panel、GridPanel
- WrapBox、ScrollBox、SizeBox、Switcher、SafeZone
- ListView、TileView、TreeView
- DynamicEntryBox、InvalidationBox、RetainerBox、TextBox、RichTextBlock
- Border、Button、CheckBox、Image、NamedSlot
- ProgressBar、Slider、ExpandableArea、SpinBox、CircularThrobber
- MenuAnchor、Space、BackgroundBlur
ListView踩坑
UMG生命周期
Geometry应用——获得UMG屏幕位置
选修
UI的制作与优化
Slate源码分析——点击事件的触发流程
动态创建UMG的Animation
UI方面先看各种控件的使用细节。熟练之后就是研究Slate,或者是实现一些根据项目定制比较骚的功能。比如说想让一个按钮既可以拖动,又可以点击,又可以在列表里面滑动。或者是双层嵌套LIstview,里面和外面的ListView都可以滚。
AI
必修
官方文档——AI
对行为树几个特性的理解
选修
AI_Perception感知模块的使用和部分源码讲解
AI行为树源码解读
Navmesh底层(Recast基础和寻路算法)
状态树介绍
AI的话先跟官方文档过一遍熟悉行为树。UE的行为树多了Service节点的概念。熟练之后研究行为树源码和寻路底层。值得一提的UE5新增加的状态树也值得了解一下。状态树是一个通用的分层状态机结构,是以状态为维度去设计的。用行为树来做AI有时候会发现状态之间的切换条件不够清晰,以及不容易知道对象处于哪个状态。而且行为树不能挂在非Actor身上。所以UE5引入了状态树解决了前面的问题。但是行为树也有行为树的好处。个人认为行为树和状态树是互相补充的,没有谁可以替代谁。状态树可以用来做一些状态清晰,逻辑相对简单的机制。比如一个门它有锁住、可开门、已开门这几种状态,就比较适合用状态树来做。
Network
必修
官方文档——多人联网
多人游戏的调试技巧
(如何理解属性复制)How to Understand Network Replication
选修
网络同步原理深入
详解ReplicationGraph方案
网络方面的话肯定是研究UE自己的网络架构,包括DS架构以及属性复制、Actor复制这些。用UE做网游如果不用DS而是自己研发一套服务器架构是非常麻烦且低效的,鸡佬所在项目曾经尝试过不用DS,做了一年各种蛋疼,转DS后才发现香的一批。必修第三个链接是一个非常优秀的视频,把属性复制讲的非常清晰,看完之后会觉得打通了任督二脉。选修部分还加了一个ReplicationGraph插件的使用。ReplicationGraph插件是用来解决大世界Actor复制效率低下的问题。如果是做地图比较大的游戏强烈推荐使用这个插件。
Editor
选修
Plugin开发概要
自定义菜单栏
关卡编辑器扩展
ContentBrowser拓展
资源类型扩展
属性面板拓展
创建自定义Filter
创建一个预览视窗
Editor方面主要是编辑器扩展了。UE的编辑器扩展比Unity比起来难搞了不少,你不光要懂Slate还得熟悉反射系统。一般对于客户端来说工具向的需求不多,所以这整个模块的内容我都列为了选修。上面这个文章也只是编辑器扩展的冰山一角,如果要深入学习还是建议看UE它自己的一些编辑器是怎么做的。
Render & Effect
选修
材质编辑器入门Intro to Materials
Cascade粒子系统入门Into to Cascade
Niagara粒子系统官方文档
渲染视觉效果方面我只列了材质编辑器和粒子系统的使用。毕竟我们是客户端路线,不是TA路线,看太多渲染相关的东西有点本末倒置了。
UE5
必修
官方文档——Lyra工程
选修
Lyra解读大纲
UE5 Lyra示例项目解读(输入、移动、属性)
UE5 Lyra示例项目解读(武器射击、资源管理)
Lyra的动画蓝图
GameFeature框架
ControlFlows插件
Lyra是UE5官方做的第三人称多人射击游戏学习项目。包含了基础的3C(Character,Controller,Camera)功能,输入(EnhancedInputSystems),GAS技能,动画,消息转发(GameplayMessageRouter),多人联网等很多可以学习的内容。即使你是使用UE4的开发者也强烈建议学习。GameFeature和ControlFlows都是在Lyra里面使用的插件,根据个人需要去看吧。
优秀个人博客
- vj东
- 南京周润发
- 大钊
- Jerish
- stone
- quabqi
- 查里鹏
- (日)alwei
- (英)Noah zuo
- (英)ben
关于作者:
- 水曜日鸡,喜欢ACG的游戏程序员。曾参与索尼中国之星项目《硬核机甲》的开发。 目前在某大厂做UE4项目。
CSDN博客:https://blog.csdn.net/j756915370
知乎专栏:https://zhuanlan.zhihu.com/c_1241442143220363264
相关文章:
UE4游戏客户端开发进阶学习指南
前言 两年多前写过一篇入门指南,教大家在短时间内快速入门UE4的使用,在知乎被很多人收藏了。如今鸡佬使用UE快三年了,是时候更新一下进阶版本的学习指南。本文对于读者的要求: 有一定的C基础已经入门UE,能够用蓝图和…...
javaee SpringMVC 乱码问题解决
方法一 在web.xml文件中注册过滤器 <!-- 注册过滤器 设置编码 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param&…...
用ChatGPT做数据分析,提升10倍工作效率
目录 写报告分析框架报告框架指标体系设计 Excel 写报告 分析框架 拿到一个专题不知道怎么做?没关系,用ChatGPT列一下框架。 以上分析框架挺像那么回事,如果没思路的话,问问ChatGPT能起到找灵感的作用。 报告框架 报告的框架…...
【Pytorch笔记】4.梯度计算
深度之眼官方账号 - 01-04-mp4-计算图与动态图机制 前置知识:计算图 可以参考我的笔记: 【学习笔记】计算机视觉与深度学习(2.全连接神经网络) 计算图 以这棵计算图为例。这个计算图中,叶子节点为x和w。 import torchw torch.tensor([1.]…...
浏览器安装vue调试工具
下载扩展程序文件 下载链接:链接: 下载连接网盘地址, 提取码: 0u46,里面有两个crx,一个适用于vue2,一个适用于vue3,可根据vue版本选择不同的调试工具 crx安装扩展程序不成功,将文件改为rar文件然后解压 安装…...
C/C++学习 -- RSA算法
概述 RSA算法是一种广泛应用于数据加密与解密的非对称加密算法。它由三位数学家(Rivest、Shamir和Adleman)在1977年提出,因此得名。RSA算法的核心原理是基于大素数的数学问题的难解性,利用两个密钥来完成加密和解密操作。 特点 …...
基于若依ruoyi-nbcio支持flowable流程增加自定义业务表单(一)
因为需要支持自定义业务表单的相关流程,所以需要建立相应的关联表 1、首先先建表wf_custom_form -- ---------------------------- -- Table structure for wf_custom_form -- ---------------------------- DROP TABLE IF EXISTS wf_custom_form; CREATE TABLE wf…...
面试经典 150 题 1 —(数组 / 字符串)— 88. 合并两个有序数组
88. 合并两个有序数组 方法一: class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for(int i 0; i<n;i){nums1[mi] nums2[i];}sort(nums1.begin(),nums1.end());} };方法二: clas…...
【大数据 | 综合实践】大数据技术基础综合项目 - 基于GitHub API的数据采集与分析平台
🤵♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...
超高频RFID模具精细化生产管理方案
近二十年来,我国的模具行业经历了快速发展的阶段,然而,模具行业作为一个传统、复杂且竞争激烈的行业,企业往往以订单为导向,每个订单都需要进行新产品的开发,从客户需求分析、结构确定、报价、设计、物料准…...
FP-Growth算法全解析:理论基础与实战指导
目录 一、简介什么是频繁项集?什么是关联规则挖掘?FP-Growth算法与传统方法的对比Apriori算法Eclat算法 FP树:心脏部分 二、算法原理FP树的结构构建FP树第一步:扫描数据库并排序第二步:构建树 挖掘频繁项集优化&#x…...
Jmeter 分布式压测,你的系统能否承受高负载?
你可以使用 JMeter 来模拟高并发秒杀场景下的压力测试。这里有一个例子,它模拟了同时有 5000 个用户,循环 10 次的情况。 请求默认配置 token 配置 秒杀接口 结果分析 但是,实际企业中,这种压测方式根本不满足实际需求。下…...
什么是浮动密封?
浮动密封也称为机械面密封或双锥密封,是一种用于各种行业和应用的特殊类型的密封装置。它旨在提供有效的密封和保护,防止污染物的进入以及旋转设备中润滑剂或液体的润滑剂泄漏。 浮动密封件由相同的金属环组成,这些金属环称为密封环…...
浅析前端单元测试
对于前端来说,测试主要是对HTML、CSS、JavaScript进行测试,以确保代码的正常运行。 常见的测试有单元测试、集成测试、端到端(e2e)的测试。 单元测试:对程序中最小可测试单元进行测试。我们可以类比对汽车的测试&…...
线上mysql表字段加不了Fail to get MDL on replica during DDL synchronize,排查记录
某天接近业务高峰期想往表里加字段加不了,报错:Fail to get MDL on replica during DDL synchronize 遂等到业务空闲时操作、还是加不了, 最后怀疑是相关表被锁了,或者有事务一直进行(可能这俩是一个意思)&…...
vue3使用element plus的时候组件显示的是英文
问题截图 这是因为国际化导致的 解决代码 import zhCn from "element-plus/es/locale/lang/zh-cn"; 或者 import zhCn from "element-plus/lib/locale/lang/zh-cn";const localezhCn<el-config-provider :locale"locale"><el-date-pic…...
Matlab参数估计与假设检验(举例解释)
参数估计分为点估计和区间估计,在matlab中可以调用namefit()函数来计算参数的极大似然估计值和置信区间。而数据分析中用得最多的是正态分布参数估计。 例1 从某厂生产的滚珠中抽取10个,测得滚珠的直径(单位:mm)为x[…...
qt响应全局热键
QT5 QWidget响应全局热键-百度经验...
android 代码设置静态Ip地址的方法
在Android中,可以使用以下代码示例来设置静态IP地址: import android.content.Context import android.net.ConnectivityManager import android.net.LinkAddress import android.net.Network import android.net.NetworkCapabilities import android.ne…...
Elasticsearch安装访问
Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
