当前位置: 首页 > news >正文

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 写报告 分析框架 拿到一个专题不知道怎么做&#xff1f;没关系&#xff0c;用ChatGPT列一下框架。 以上分析框架挺像那么回事&#xff0c;如果没思路的话&#xff0c;问问ChatGPT能起到找灵感的作用。 报告框架 报告的框架…...

【Pytorch笔记】4.梯度计算

深度之眼官方账号 - 01-04-mp4-计算图与动态图机制 前置知识&#xff1a;计算图 可以参考我的笔记&#xff1a; 【学习笔记】计算机视觉与深度学习(2.全连接神经网络) 计算图 以这棵计算图为例。这个计算图中&#xff0c;叶子节点为x和w。 import torchw torch.tensor([1.]…...

浏览器安装vue调试工具

下载扩展程序文件 下载链接&#xff1a;链接: 下载连接网盘地址&#xff0c; 提取码: 0u46&#xff0c;里面有两个crx,一个适用于vue2&#xff0c;一个适用于vue3&#xff0c;可根据vue版本选择不同的调试工具 crx安装扩展程序不成功&#xff0c;将文件改为rar文件然后解压 安装…...

C/C++学习 -- RSA算法

概述 RSA算法是一种广泛应用于数据加密与解密的非对称加密算法。它由三位数学家&#xff08;Rivest、Shamir和Adleman&#xff09;在1977年提出&#xff0c;因此得名。RSA算法的核心原理是基于大素数的数学问题的难解性&#xff0c;利用两个密钥来完成加密和解密操作。 特点 …...

基于若依ruoyi-nbcio支持flowable流程增加自定义业务表单(一)

因为需要支持自定义业务表单的相关流程&#xff0c;所以需要建立相应的关联表 1、首先先建表wf_custom_form -- ---------------------------- -- Table structure for wf_custom_form -- ---------------------------- DROP TABLE IF EXISTS wf_custom_form; CREATE TABLE wf…...

面试经典 150 题 1 —(数组 / 字符串)— 88. 合并两个有序数组

88. 合并两个有序数组 方法一&#xff1a; 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());} };方法二&#xff1a; clas…...

【大数据 | 综合实践】大数据技术基础综合项目 - 基于GitHub API的数据采集与分析平台

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…...

超高频RFID模具精细化生产管理方案

近二十年来&#xff0c;我国的模具行业经历了快速发展的阶段&#xff0c;然而&#xff0c;模具行业作为一个传统、复杂且竞争激烈的行业&#xff0c;企业往往以订单为导向&#xff0c;每个订单都需要进行新产品的开发&#xff0c;从客户需求分析、结构确定、报价、设计、物料准…...

FP-Growth算法全解析:理论基础与实战指导

目录 一、简介什么是频繁项集&#xff1f;什么是关联规则挖掘&#xff1f;FP-Growth算法与传统方法的对比Apriori算法Eclat算法 FP树&#xff1a;心脏部分 二、算法原理FP树的结构构建FP树第一步&#xff1a;扫描数据库并排序第二步&#xff1a;构建树 挖掘频繁项集优化&#x…...

Jmeter 分布式压测,你的系统能否承受高负载?

‍你可以使用 JMeter 来模拟高并发秒杀场景下的压力测试。这里有一个例子&#xff0c;它模拟了同时有 5000 个用户&#xff0c;循环 10 次的情况‍。 请求默认配置 token 配置 秒杀接口 ​结果分析 ​但是&#xff0c;实际企业中&#xff0c;这种压测方式根本不满足实际需求。下…...

什么是浮动密封?

浮动密封也称为机械面密封或双锥密封&#xff0c;是一种用于各种行业和应用的特殊类型的密封装置。它旨在提供有效的密封和保护&#xff0c;防止污染物的进入以及旋转设备中润滑剂或液体的润滑剂泄漏。 浮动密封件由相同的金属环组成&#xff0c;这些金属环称为密封环&#xf…...

浅析前端单元测试

对于前端来说&#xff0c;测试主要是对HTML、CSS、JavaScript进行测试&#xff0c;以确保代码的正常运行。 常见的测试有单元测试、集成测试、端到端&#xff08;e2e&#xff09;的测试。 单元测试&#xff1a;对程序中最小可测试单元进行测试。我们可以类比对汽车的测试&…...

线上mysql表字段加不了Fail to get MDL on replica during DDL synchronize,排查记录

某天接近业务高峰期想往表里加字段加不了&#xff0c;报错&#xff1a;Fail to get MDL on replica during DDL synchronize 遂等到业务空闲时操作、还是加不了&#xff0c; 最后怀疑是相关表被锁了&#xff0c;或者有事务一直进行&#xff08;可能这俩是一个意思&#xff09;&…...

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参数估计与假设检验(举例解释)

参数估计分为点估计和区间估计&#xff0c;在matlab中可以调用namefit()函数来计算参数的极大似然估计值和置信区间。而数据分析中用得最多的是正态分布参数估计。 例1 从某厂生产的滚珠中抽取10个&#xff0c;测得滚珠的直径&#xff08;单位&#xff1a;mm&#xff09;为x[…...

qt响应全局热键

QT5 QWidget响应全局热键-百度经验...

android 代码设置静态Ip地址的方法

在Android中&#xff0c;可以使用以下代码示例来设置静态IP地址&#xff1a; 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 的分布式搜索和分析引擎&#xff0c;设计用于云计算环境中&#xff0c;能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性&#xff0c;可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...

使用ch340继电器完成随机断电测试

前言 如图所示是市面上常见的OTA压测继电器&#xff0c;通过ch340串口模块完成对继电器的分路控制&#xff0c;这里我编写了一个脚本方便对4路继电器的控制&#xff0c;可以设置开启时间&#xff0c;关闭时间&#xff0c;复位等功能 软件界面 在设备管理器查看串口号后&…...

Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)

做RAG自己打算使用esmilvus自己开发一个&#xff0c;安装时好像网上没有比较新的安装方法&#xff0c;然后找了个旧的方法对应试试&#xff1a; &#x1f680; 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana&#xff0c;适配中文搜索…...

Linux实现线程同步的方式有哪些?

什么是线程同步&#xff1f; 想象一下超市收银台&#xff1a;如果所有顾客&#xff08;线程&#xff09;同时挤向同一个收银台&#xff08;共享资源&#xff09;&#xff0c;场面会一片混乱。线程同步就是给顾客们发"排队号码牌"&#xff0c;确保&#xff1a; 有序访…...