[GENERIC]知识总结
知识总结
1. AI
寻路
路径规划之 A* 算法
[译]寻路优化
JPS/JPS+ 寻路算法
在AI寻路决策中运用势力图(Influence Map)
LPA* 与 D* Lite
NavMesh 生成算法
A* 的估价:设起点为 S、终点为 T,可以选择 D0 * ManhattanDist(S, T) + D1 * abs( Cross(Se, Te) )
其中 D0 = 2,D1 = 0.001
2. 动画
骨骼动画
骨骼动画原理
3. Gameplay
基础
Effective C++
架构
浅谈《守望先锋》中的 ECS 构架
漫谈Entity Component System (ECS)
4. 工具流
引入第三方库
c++库文件的理解
5. UI
6. 网络
预测、和解、插值
技能系统与网络同步
KCP
7. 物理
碰撞
多边形碰撞检测
SAT:每个方向的投影都有重叠部分则图形碰撞。实际上不需要检测所有方向,二维使用 每条边 的法向量检测;三维使用 每个面 的法向量、两个图形的边两两组成的面 的法向量进行检测即可。
GJK、GJK
两个图形的闵可夫斯基差包含原点则图形碰 ...
[UE]知识总结
知识总结
1. 3C
CharacterMovement
《Exploring in UE4》移动组件详解[原理分析]
UE4移动的网络同步
2. AI
寻路
UE4 Navmesh寻路
UE4 的 RecastDetour 组件
UE4 主要使用 RecastDetour 组件主要支持 3D 场景的导航网格导出和寻路,也就是 NavMesh
行为树
UE4行为树详解
[UE4][AI] 浅析UE4-BehaviorTree的特性
3. 动画
虚幻引擎里的运动学研究
4. Gameplay
GAS
UE的GAS原理深入探究
GAS Documentation
GAS架构分析
GAS探究
SplashDamage的技术负责人的GAS介绍
UE5:Lyra示例项目
5. 工具流
插件基础
插件与模块
UE4编辑器如何生成和共享插件
[UE4]无插件源码编译和打包工程
How to Make Tools in UE4
注意事项
在同一个插件模块里面定义的全局静态变量共享。(在 A.cpp 中定义 static int a,在 B.cpp 可以调用。若在 B.cpp 中也定义 static ...
[UNITY]知识总结
知识总结
1. AI
2. 动画
动画基础
学习笔记 — Unity动画系统
Procedural Animation
Unity里的Procedural Animation
解决方案
Playable API:定制你的动画系统
Animancer
3. Gameplay
架构
GameFramework 解析
Unity DOTS:目录
协程
Unity 中的协程
地形
大世界GPU Driven地形入门
4. 工具流
反编译
dnSpy
编辑器
Odin常用功能整理
技能编辑器
技能编辑器的设计实现
5. UI
6. 网络
多人网络游戏同步探究
7. 物理
8. 渲染
渲染基础
Unity Shader 入门精要
卡通渲染
从零开始的卡通渲染
9. 性能优化
内存
【笔记】Unity内存分配和回收的底层原理
Unity游戏内存分布概览
[UE]弱网工具Clumsy的使用
弱网工具Clumsy的使用
Clumsy 用于弱网测试时,进行本地弱网环境的模拟,基于 WinDivert 实现,可以出模拟延迟、丢包等网络状态。
Downloads
下载地址:Clumsy;官方文档:Clumsy Manual
下载后的几个重点文件:
打开 Clumsy.exe 可以看到以下内容:
可以看出这里有几个重点的 Function,一般重点使用 Lag 延迟、Drop 丢包。
在 Filtering 填入对应的 Command 后,设置 Functions,点击 Start 即可开始模拟。
同时可以在 Config.txt 中,预设一些 Presets 方便下次使用。
UE DS 中的使用
对于 UE的 DS 环境,首先为了具体到某一个 Client / DS,采用 Filter Port 的机制,对某个具体的端口号进行操作。
用 netstat -aon\Findstr 进程ID,查询 DS/Client 进程,通过 UDP 进行链接。
DS 的 port 一般可以在启动命令中找到 -port=17777;
Client 的 port 可以在 DS 的 Log 中, ...
[UE]夺旗模式框架
夺旗模式框架
描述
夺旗模式:
场景里会按照一定的规则刷新出不同类型的旗帜(不同类型的旗帜有不同的得分、血量、表现等);
玩家会被分成若干个队伍,抢夺刷新出来的旗帜,将旗帜带到自己队伍目标点进行销毁,则可以获得分数;
玩家持有旗帜时,旗帜可能会掉落或被抢夺:被其它玩家撞击到则旗帜被抢夺到其它玩家身上;旗帜的血量归零则会掉落回场景;
有正式赛与加时赛两种类型的比赛,首先会开启正式赛;对于正式赛,率先达到目标分的队伍获胜;如果平局则开启加时赛,否则进行结算;对于加时赛,率先得分的队伍获胜,如果平局则以两队平局进行结算;
要点总结:
旗帜实体:旗帜本身有自己的类型、得分、血量;
旗帜刷新:场景内根据一定规则(倒计时刷新、旗子上缴)会刷出不同类型旗帜;
旗帜传递:玩家可以拾取场景里的旗帜、相互抢夺旗帜、掉落旗帜(持有旗帜血量归零)、将旗帜送给终点得分等;玩家可以组队,共享队伍得分;同队伍之间的玩家可以传递旗帜;
单局流程:所有玩家就绪分队后,传送到起始点准备开赛;如果一局比赛平分,一定条件下可以触发下一场比赛继续;
模式基础
单局流程
首先,一个完整的夺旗赛,由若干个子比赛构成,子比赛 ...
[UE]CommonParams解决方案
CommonParams解决方案
在实现业务框架的时候,经常需要支持传参的功能(比如 Buff 系统中,AddBuff 的时候,通常需要支持外部传入一个 BuffParams ,在内部解析出各种 Param 使用。)
这个参数需要支持基本的数据保存、同步等。
初始的想法
一个最简单的想法,是打包一个结构体,支持各种类型的传入,比如:
12345678910USTRUCT()struct Params{ UPROPERTY() uint64 uVar0; UPROPERTY() int iVar0; UPROPERTY() float fVar0;}
这样虽然很简单,同时可以通过反射来同步。
但是有一个巨大的问题,那就是在解析参数的时候,只知道 Var0 这种没有名字的抽象的概念,使用者需要记住 Var0 对应的是什么数据,很不直观。
CommonVariantParams
维护一个 CommonVariantParams,通过 TMap <FString, FVariant> ValueMap 来保存数据,同时自定义 ...
[UE]GameSubSystem简单实现
GameSubSystem简单实现
一种简单的维护 SubSystem 的解决方案,参考 UE 自带的 FSubsystemCollection 实现。
在维护各个业务时,经常需要将一个上层的 Manager,下面再拆出若干个子系统,需要一种快捷的方法快速扩展出一套 SUbSystem 系统。
基本结构
classDiagram
Manager..>FGameSubSystemCollection
class Manager {
SubSystemCollections : FGameSubSystemCollection~USubSystemBase~
}
class FGameSubSystemCollection {
FGameSubSystemCollection()
}
FGameSubSystemCollection--|>FGameSubSystemCollectionBase
class FGameSubSystemCollectionBase {
Outer : TWeakObjectPtr~UObject~
...
[UE]TeamSystem框架
TeamSystem框架
一个简单的组队系统:支持玩家的 加入、退出 队伍,以及维护队伍的各种数据(比如 Members、Score)。
首先需要一个全局的 TeamManager ,以及一个在 Player 身上的 TeamComponent 负责维护 Player 相关的组队信息;
同时,将业务拆分为多个 TeamSubSystems。
以及最重点的 数据同步,根据不同的数据类型,进行不同方式的数据同步。
TeamSubSystemBase
首先,需要将业务拆分为多个 SubSystem ,通过 TeamManager 持有 SubSystemCollection 来实现这个功能。
需要一个 TeamSubSystemBase ,在这里传入 System = TeamManager 以及为后续同步数据的分发做准备。
参考:[UE]GameSubSystem简单实现
123456789101112131415161718UCLASS(Abstract)class UTeamSubSystemBase : public UGameSubSystemBase{ GENERAT ...
[UE]GameplayBuffSystem框架
GameplayBuffSystem框架
设计
首先我们需要一个 BuffManager ,管理所有的 BuffComponent。
(实现的时候,可以让 BuffManager 作为一个 GameStateComponent;BuffComponent 作为一个 PlayerStateComponent )
对于每个 Player,需要一个 BuffComponent 管理该 Player 身上持有的 Buff;
对于 Buff,需要一个 BuffBase 作为 Buff 的基类;
classDiagram
UGameplayBuffManager ..> FGameplayBuffSetting
UGameplayBuffManager ..> UGameplayBuffComponent
UGameplayBuffManager ..> FGameplayBuffParams
class UGameplayBuffManager {
BuffSettings : TMap~int|FGameplayBuffSetting~
+Com ...
[UE]GameFeature浅析
GameFeature浅析
一套支持动态增删游戏玩法的框架,往 CoreGame 里 Add/Remove 其它游戏资源/逻辑;
以 Lyra(UE5.3) 为例,GameFeature 提供了很好的解耦资源/逻辑的方案,可以看出这里的 ShooterCore 被实现为了一个相对比较独立的 Plugin。
初始化
首先在游戏内,GameFeaturesSubsystem 管理着所有的 GameFeature,看到对应的初始化 UGameFeaturesSubsystem::Initialize,可以分为几步:
加载Policy:根据 GameFeaturesSubsystemSettings->GameFeaturesManagerClassName 加载对应的 GameSpecificPolicies
注册资源回调:UAssetManager::CallOrRegister_OnAssetManagerCreated
注册 ConsoleCommand 方便 Debug
在资源加载完的回调后,会走到 UGameFeaturesSubsystem::OnAs ...