sli97
最后更新于
《多人联机对战游戏》客户端和服务端的实现与构架是怎么样_哔哩哔哩_bilibili
账号服务
GateWay 注册到 Register
客户端 Login 到 Rigster 获取 Gateway Ip
客户端与 Gateway 建立长连接
Gateway 与 GameService 进行数据交互
存储到 DB
战斗部分
客户端上传操作到服务端
服务端计算角色数据
同步状态到所有客户端
视线区域外剔除
优化
每个 Battle 服务限制人数
ProtoBuf 替代 Json
缓冲数组延时发送操作指令 (16ms -> 50ms)
合并持续请求到开始请求 + 结束请求, 需要在服务器保持状态
中间件 : 消息队列, 缓存数据库
《地图随机生成》柏林噪声算法如何实现游戏世界_哔哩哔哩_bilibili
柏林噪声
基于晶格的连续梯度算法
当入参连续时, 返回值也是连续的
函数叠加细化地形
米切尔最佳候选算法
可以用四叉树优化
《游戏中的寻路算法》游戏中有哪些常见的寻路算法_哔哩哔哩_bilibili
BFS 广度优先搜索
战旗可行进区域
效率较低
启发式搜索
只对看起来更近的方向扩散
各种距离
四方向 : 曼哈顿
八方向 : 切比雪夫
其他
《游戏中的避障算法》游戏单位如何实现动态避障_哔哩哔哩_bilibili
ROV2
warmtrue/RVO2-Unity: use rvo2 (Optimal Reciprocal Collision Avoidance) in unity.
《游戏中的AI技术》状态机、行为树、决策树如何实现游戏AI_哔哩哔哩_bilibili
有限状态机 :
行为树 :
决策树 :
预测模型, 收集历史数据进行汇总
熵越大排列在树的越高位, 对决策结果影响越大
《地图随机生成》波函数坍缩算法是如何实现的_哔哩哔哩_bilibili
连续坍缩
约束规则
从多个可能状态到一个确定状态
优先坍缩高概率地块 (熵低处)
《JPS跳点搜索算法》比A*算法快百倍的JPS寻路算法是如何实现的_哔哩哔哩_bilibili
跳点搜索算法 : 没有预处理的情况下, 最快的 2D 网格搜索算法
跳点搜索
强迫邻居
N 是 X 的强迫邻居 : 节点 X 是到节点 N 的必经节点
定义 : 当节点x的八个邻居中存在障碍,且节点x的父节点p,经过节点x到达节点n的距离代价总是小于不经过节点x到达节点n的任意路径的距离代价,则称节点n是节点x的强迫邻居
邻居裁剪
劣性节点只能由父节点到达, 自然节点只能由子节点到达
跳点
条件一:节点x是起点或者终点
条件二:节点x至少有一个强迫邻居
条件三:节点x的父节点p在斜线方向,并且节点x的直线方向(水平或垂直)上存在满足条件一或二的节点
按照先直线后斜线的方式搜索跳点
《游戏中的空间划分》四叉树、KD树如何优化游戏性能_哔哩哔哩_bilibili
范围内静态物体查询优化
空间数据结构
QuadTree
KDTree
BVH
BSP Tree
四叉树更新
物体运动时更新, 移动元素到另一节点
边界情况
《游戏中的AOI算法》九宫格法、十字链表法如何优化MMO网游_哔哩哔哩_bilibili
Area Of interest
简单, 快速, 方便
密集时性能退化, 空间占用大
十字链表法
根据单位进出视野来发送事件
用十字链表记录位置状态
对比
内存 :
十字链表 : 单位数量
九宫格 : 单位密度和场景大小
视野范围
十字链表 : 自适应
九宫格 : 固定
数据结构维护
十字链表适合小幅度
九宫格 : 直接设定
《群体寻路与避障》Flow Field流场寻路算法如何实现群体寻路_哔哩哔哩_bilibili
热力图
向量场
向量插值
其他问题
转弯效果
单位间碰撞
单位障碍碰撞
常用曼哈顿距离 H
A*
Theta* 算法
FSM
子状态机
分层状态机
方便策划配置行为跳转,需要可视化编辑器
回溯机制, 拥有快照
九宫格法