【游戏优化】AOI算法、Unity游戏优化(一)

您所在的位置:网站首页 unity单机交易系统 【游戏优化】AOI算法、Unity游戏优化(一)

【游戏优化】AOI算法、Unity游戏优化(一)

2024-07-05 01:39| 来源: 网络整理| 查看: 265

Unity游戏优化、内存优化、资源优化、AOI算法、安全 AOI概念和设计地图广播(地图消息同步)AOI解决的问题AOI的设计场景分析与方案设计(一)改善方案场景分析与方案设计(二)场景分析与方案设计(三)进一步优化的思考 设计AOI勿忘初心真实AOI案例其它方案参考

AOI概念和设计

AOI(兴趣范围Area Of Interest) 游戏中的广播的类型 全服广播、地图广播、社交关系、交互目标、玩家自身 全服广播的特点:频率不高 地图广播的特点 :移动同步广播频率高,流畅度,做插值,服务器有压力 社交关系:低频率 交互目标:P2P,点对点,服务器中转,广播频度低 玩家自身:客户端和服务器的广播,别人不知道,只和自身相关,频度也不会高

地图广播(地图消息同步)

【问题一】 同一个地图超过50人就很卡,服务器端怎么分析怎么解决? 承载结构,最大允许多少人 假设一个地图有100人,100个人移动,其他人都要知道 。 至少要发100*100次同步消息。同步消息间隔又需要很短。 假设1秒要同步10次,1秒需要有10万次消息处理。还有包括消息的收发,会有更多消息处理,客户端会非常卡。 假设一个消息包需要~3MB/S =24Mb/S ,100人就需要2400Mb/S,带宽压力大,转发率压力大(每秒转发多少个包,剩下的放路由器缓存里,无法一次性转发) 如何将1台服务器只能承载100人数,提升到承载1000人数,提升10倍甚至更高呢?

MMO可以插值校正,频度降低,【FPS不行,服务端不做强验证】 区分服务器线路,限制人数 技术层面:在地图消息同步的基础上 使用AOI 只关心玩家身边的人 在这里插入图片描述

AOI解决的问题

建立AOI兴趣范围清单 只对兴趣范围内的目标广播 极大的降低消息处理压力与网络负载

AOI的设计

所有的设计原则 在这里插入图片描述 兴趣范围的规范方案(划分范围,如何区别在身边) 对象与数据结构 高性能算法

场景分析与方案设计(一)

区域划分 每个对象都有一个AOI管理器,有一个兴趣范围,放置一个数组,遍历周围的人,可维护的清单,半径N米的范围 消息的同步数量会减少,但不会大幅度减少性能,要比较 消耗量确实减少,但是CPU性能是否增加了吗????

级别设定 AOI范围级别设定 Level3:是不是能看到,产生兴趣预先加载 Level2:产生兴趣,同步基本数据,同步的数据少,能看到 Level1:产生兴趣,同步基本数据,精准同步各种状态

伪代码 在这里插入图片描述 优点 不需要特殊的数据结构 易于实现 缺点: 计算成本较高(1+N)*N / 2 ,第1个人,需要对其它999人计算,计算量还是相当大的 1000人 =》 500500次消息量 , 只减少一半,优化还不够

改善方案

多线程:并行计算,提升计算效率 延迟计算:减少计算间隔(不需要每一帧进行计算) 分批计算:100 / frame (一帧计算100人)

场景分析与方案设计(二)

【问题】距离计算:三维向量计算比较复杂 【设想】地图格子:格子内广播 【伪代码】格子的坐标,维护每张格子上的管理器,玩家离开旧格子,进入新格子 leave和enter要做一个全局的数据结构,一位数组,连续的内存地址,数组的查询最快,计算消耗低

在这里插入图片描述 优点 计算速度非常快 缺点 需要额外数据结构存储格子信息 需要额外的格子管理逻辑 实现复杂度高 【最重要的问题】格子边界问题

相邻格子,玩家不同步,可以进一步优化

场景分析与方案设计(三)

9宫格,广播给其它9个格子,合理划分格子大小,最终影响性能消耗 格子太大,玩家数量少,发送的消息太多 格子太小,同步消息不多,性能消耗大

进一步优化 9宫格内在做半径计算

进一步优化的思考

算法优化 优化数据结构,树结构,四叉树八叉树 降低运算消耗

(服务器)ECS架构(要求很高,容易做批量运算) 采用面向数据概念优化架构,提升运算性能

并行运算与GPU加速 利用并行计算提升性能 采用GPU加速减少CPU消耗

设计AOI勿忘初心

适可而止 避免过度优化

真实AOI案例

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

其它方案参考

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3