3.4k 3 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # PhysX——Serialization 篇 本文基于实现的角度,对 PhysX 中序列化和反序列化相关内容做了比较详细的梳理。对于想要了解其中原理或者希望动手修改序列化内容的开发者应该有所裨益。 # 概述 和其他的序列化程序不同,PhysX 中的对象由于存在着些许依赖关系。因此需要花费较大的精力在关系图的建立上,这也是整个序列化流程中较为重要的一环。 # 常用容器介绍 让我们先来看看序列化中常见的几个容器,这有助于我们理解序列化中对于关系的处理: #...
24k 22 分钟

# Unreal ReplicationGraph 篇 # 概述 ReplicationGraph 作为 Unreal 引擎的核心功能,提供了多人游戏下的网络复制。为了适应不同游戏场景和特殊业务需求,ReplicationGraph 提供了一套可扩展可定制化的设计模板,通过抽象同步过程,把关联的 Actor 和 Connection...
14k 13 分钟

# Unreal RPC RPC 在 Unreal 中被广泛运用,是除了 Replication 之外唯二的数据传输方式(另一个是手动压解的收发包模式)。 RPC(Remote Procedure Call)远程过程调用,简单来说就是像执行本地函数一样的调用远程服务接口,简化调用编码复杂度,那么在 Unreal 中具体是如何实现的呢? # RPC 函数定义 这里以 ServerSetReplicatedTargetData 函数为例,详细了解一下 Unreal 中关于 RPC 的定义: UFUNCTION(Server, reliable, WithValidation)void...
16k 15 分钟

本篇内容和源码均参考 UE5。 # Unreal 握手 && 登录流程 # 握手包结构 先来了解一下握手包的结构: 主要由 5 个部分组成: MagicHeader:暂未使用的空包头。 SessionID && ClientID:历史会话 ID(用于重连)及客户端 ID。 包体:握手包的数据块,其内又可以分为三个部分: 基础数据块:主要包含基本的包信息如包类型、客户端版本、客户端包编号等。 密钥 ID:加密使用的服务器密钥编号。 包时间戳和 Cookie 信息:Cookie 是通过密钥 ID 对应的密钥对时间戳 + 客户端...
4.1k 4 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # GJK && EPA GJK 用来计算物体间的最短碰撞距离,而 EPA 用于计算物体发生嵌入的最短脱离距离,通过 GJK 和 EPA 可以知道物体是否嵌入,还需要运动多久发生碰撞。 # 基本概念 闵可夫斯基差(Minkowski difference) 也经常被称为「闵可夫斯基和」,简单来说就是两个集合的顶点两两做加法 (减法) 得到的新集合所组成的凸包。 支撑面 &&...
3.9k 4 分钟

# 基于 Clion 开发的 WorkFlow 汇总 项目的 IDE 五花八门,作为一个不太硬核的程序员,还是希望尽可能的简化开发流程,忽略琐碎问题,提高编码体验。下面简单介绍一下我目前基于 Clion 的工作流: # Clion 相关配置 # 插件推荐 # 仿 vscode 插件,感觉就像是在用 vscode,0 成本的编辑器转换: vscode 快捷键映射 映射之后,全局搜索是会失效的,我这边改成了 atl + a 此外自动格式化代码快捷键也被我修改为了 shift + f 各位可以根据自己的习惯进行修改。 vscode 主题模板 # 汉化包 # git 相关集成插件 #...
17k 16 分钟

本篇内容和源码均参考 UE5。 # UE 资产导出和加载 资产(Asset)是 Unreal Engine 中持久化对象的重要文件,通常以 .uasset 结尾,Asset 的官方定义是存储 UObject 被序列化后的二进制文件。而在 Unreal Engine Editor 中预览和修改操作,本质上就是对这些「资产」文件的读写。下面以 BlueprintStruct 为例,分成以下几个步骤,简单梳理整个流程: 资产加载(Load) 反序列化(UnSerialize) 资产导出 (Export) 序列化(Serialize) # 资产加载 Unreal...
5k 5 分钟

本篇内容和源码均参考 UE5。 # UE VirtualMachine enum EExprToken : uint8{ // Variable references. EX_LocalVariable = 0x00, // A local variable. EX_InstanceVariable = 0x01, // An object variable. EX_DefaultVariable = 0x02, // Default variable for a class context. // = 0x03, EX_Return =...
18k 17 分钟

本篇内容和源码均参考 UE5。 # Delegate 委托 委托是 Unreal 对于 C++ 函数的一种封装。在 Unreal...
5.3k 5 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # PhysX——Task Management 篇 任务管理器是 PhysX 管理 CPU 和 GPU 计算资源的调度管理器。在保证每个 Task 按部就班执行的情况下尽可能的提高运行效率,在 Cloth 和 Simulate 等场景有广泛的应用。因此本篇也作为 Simulate 的前篇来着重介绍一下「任务管理器」的实现逻辑。由于调度逻辑被拆分成了 GPU 和 CPU 两部分,本篇主要还是介绍 CPU 的调度规则。 为了能够更好理解,文章内会使用部分 Simulate 代码作为示例,来介绍...