游戏大世界AOI广播算法

游戏算法-AOI基本介绍 AOI全称为Area Of Interest,初识和入门 阅读详情

简介

游戏中的AOI(Area of Interest,感兴趣区域)算法主要用于管理场景内实体的可见性及事件广播,以优化性能和同步效率。

核心上都是将一张地图上当多个玩家之间的数据进行广播时

从单个线程的处理压力 需要广播的玩家的数量上进行区分和优化

以下是常见的AOI算法分类及特点:

1. ​全场景同步法

暴力广播

原理:当任一实体移动或状态变化时,立即向场景内所有其他实体广播消息

​适用场景:玩家数量较少的小型场景

​缺点:玩家数量多时,消息量剧增,易导致性能瓶颈

处理方式:单个线程管理整张地图的广播

2. ​网格法 

九宫格算法

原理:将地图划分固定大小的网格  例如100X100的格子  一个网格的大小包含多个坐标 例如

(x坐标0-10 y坐标0-10的网格编号为1)  每个玩家都在一个对应的网格内 每个网格都会存储在这个网格内的玩家 玩家移动时以这个网格为中心的9个格子的玩家进行广播

​适用场景:一般中小的地图

​缺点:玩家数量多时,消息量剧增,易导致性能瓶颈

处理方式:一张地图里交由一个线程去管理 但一张地图玩家过多时 进行分层  每一层由一个线程进行管理 每一层的玩家之间不可见

灯塔算法   

原理:九宫格算法的改良版 将一张地图按自己的需求划分多个区域 全部区域加起来必须要包含整个地图 

每个区域有一个虚拟灯塔  作者想把它叫做线程 每个区域交由一个线程处理 每个虚拟灯塔有两个容器保存梳理 一个容器保存在灯塔范围内的玩家数据 另一个保存观察本塔的玩家  广播的时候只需要广播观察本塔的玩家   观察本塔的玩家一般包含(在灯塔范围内的玩家和灯塔范围外部分的玩家或者其他灯塔 或者其他实体)

区域之间可以有重叠 这样就可以避免了九宫格中玩家在格子边缘疯狂来回横跳 导致相邻格子中玩家的数据来回转移

​适用场景:MMO游戏的大地图

​缺点:玩家数量多时,消息量剧增,易导致性能瓶颈

处理方式:一个灯塔交由一个线程去管理 

3. ​十字链表法  

假如一张大地图中 玩家相邻的格子中就没几个玩家的 那么每次移动时都要遍历9个格子 实属有点浪费 那么十字链表法

​原理:将场景按X轴和Y轴拆分为双向链表,每个实体的位置信息分布在两个链表中。移动时通过调整链表节点顺序,快速检测视野变化。广播时找到玩家在x轴和y轴链表对应的位置 因为是双向链表 可以快速找到在自己旁边的玩家是谁 然后读取对应的玩家的坐标 判断是否符合半径广播范围

​适用场景:一般用在大地图 人物密度小

​缺点:直接以实体为单位处理,减少遍历开销,但实现复杂度较高

处理方式:x轴链表由一个线程处理 y轴链表由另一个线程处理

4. ​四叉树算法

在灯塔算法中 假如一个区域的玩家过于密集 一个线程顶不住了 那么用四叉树算法就能解决这个问题 当某个区域玩家数量达到一个阈值时 就会自动拆解成四个小区域        

​原理:将场景递归划分为四个象限,每个节点存储子区域内的实体。查询时通过层级遍历快速定位目标区域 当某个节点的玩家数量超过阈值 那么再拆分成四个象限

​适用场景:大地图中 有密集空间的 例如吃鸡的决赛圈

​缺点:实现难度较高

处理方式:不管是大区域还是小区域都可分别用一个线程去处理

游戏服务端(MMORPG)的基础算法一、AOI AOI(Area Of Interest),就是感兴趣区域,在MMOPRG游戏服务器上是不可或缺的技术。算是基础的核心技术了。通俗一点说,AOI就是玩家在场景中实时看到的区域,AOI会随着单位(比如玩家角色)在场景中的位置变化而改变。广义上,AOI系统支持任何游戏世界中的单位对一定半径范围内发生的事件进行处理。MMOPRG中绝大多数需求只是对AOI范围内发生的,围绕单位离开、进入的事件进行的处理。这两个事件可以算AOI的核心事件。比如,当你进入一个游戏场景时,如果你能看到其他玩家,那背后AOI系统就正在运作 阅读详情

相关推荐

游戏开发中AOI算法总结

定义 在MMO游戏中,在一些多人玩法中,通常出现很多玩家在同一张地图上移动的情况,假如一个玩家发生了移动,释放技能,更换装扮…这时就需要通知其他玩家,而如果通知整张地图上的所有玩家的话,显然是不现实的,这将对客户端跟服务端都造成很大的压力,甚至可能卡死。为了解决这一痛点,就有了AOI算法。 统一的接口设计 AOI需求大概是这样: 1.游戏地图上有一些npc和玩家在移动,每一个这样移动的对象我们叫做AOIEntity,每一个AOIEntity可以挂多个不同半径的AOI,每一个这种半径的AOI单元我们叫做AOI

ghscarecrow的博客 7613

深入探索 AOI 算法,缕清核心逻辑

https://zhuanlan.zhihu.com/p/201588990【导读】:网上关于AOI算法的文章很多了,但大多语焉不详,一上来就9宫格十字链表,直接把人整懵。本文试图由浅入深的介绍AOI算法的形成,希望能把AOI解决的问题,以及它的核心逻辑讲清楚。如果读完之后能所有启发,那本文的目的就达到了。AOI 算法是大型多人在线的游戏服务器中一个非常重要的基础模块,它很大程度上决定了服务器的运...

weixin_45727359的博客 2868

「游戏」游戏服务器中AOI的原理及四叉树实现

前言 要不是想起来这篇文章想写一个关于游戏服务器开发过程中关于AOI相关的文章,我都差不点忘了我是一个游戏服务器开发人员????。 之前一直写的都是关于Golang相关的源代码解析内容,今天也说一说关于游戏服务器开发中常用到的一些算法,以及相关的一些原理、实现等等。 因为我是个应届生,也处于学习阶段,对这个东西的理解不够深,如果有问题,请各位看官给予指正。在此表示感谢。 什么是AOI AOI(Area Of Interest)翻译过来就是“感兴趣的区域”,这个玩意儿在很多的游戏中都会出现,比如在MMORPG

_Echo_ 8215

分析游戏开发中 AOI 的实现思路

AOI 全称 Area Of Interest, 在游戏开发中用来做角色视野内对象显示同步和状态同步,基本上只要有公共地图的游戏都会涉及到。本篇介绍一些常用的 AOI 实现方法。

m0_73915763的博客 1251

游戏服务端开发-AOI-九宫格法解析(附代码)

1-啥是AOI AOI全称Area Of Interest,中文就是感兴趣的区域,个人理解就是玩家关注的并且可视的地图区域。 在RPG游戏中,玩家角色移动,攻击,放技能等操作都需要向其他玩家广播,但服务端由于性能原因,会避免往整张地图上的角色进行广播。为了把性能消耗降到最低,同时不影响玩家的游戏体验,就只会向玩家关注并感兴趣的区域,也就是AOI进行广播。 2-AOI-网格法(九宫格) 1# 建立坐...

食鱼酱的博客 4356

基于Golang实现多人在线游戏的AOI算法

游戏的AOI(Area of Interest)算法应该算作游戏的基础核心了,许多逻辑都是因为AOI进出事件驱动的,许多网络同步数据也是因为AOI进出事件产生的。因此,良好的AOI算法和基于AOI算法的优化,是提高游戏性能的关键。为此,需要为每一个玩家设置一个AOI,当一个对象状态发生改变时,需要将信息广播给全部玩家,那些AOI覆盖到的玩家会收到这条广播消息,从而做出对应的响应状态。服务器的玩家或NPC状态发生变化时,将消息广播到附近的玩家。

weixin_43495948的博客 2056

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

Unity游戏优化、内存优化、资源优化、AOI算法、安全 AOI概念和设计地图广播(地图消息同步)AOI解决的问题AOI的设计场景分析与方案设计(一)改善方案场景分析与方案设计(二)场景分析与方案设计(三)进一步优化的思考设计AOI勿忘初心真实AOI案例其它方案参考 AOI概念和设计 AOI(兴趣范围Area Of Interest) 游戏中的广播的类型 全服广播、地图广播、社交关系、交互目标、玩家自身 全服广播的特点:频率不高 地图广播的特点 :移动同步广播频率高,流畅度,做插值,服务器有压力 社交关系:

qq_21407523的博客 4959

基于Golang的AOI算法实现与优化

在游戏开发中,AOI(Area of Interest)算法扮演着至关重要的角色。它直接关系到游戏场景中玩家和其他实体(如NPC、怪物等)的交互体验,以及服务器性能的优化。AOI算法的核心思想是只同步玩家感兴趣的区域内的数据,从而减少不必要的网络传输和服务器计算负担。在大型多人在线游戏(MMO)中,玩家数量众多,如果服务器对所有玩家进行实时同步,将会产生巨大的网络流量和服务器负载。例如,如果一个区域内有100个玩家,每个人移动都需要向其他99个玩家同步位置信息,这将导致服务器需要处理大量的广播操作。

全世界的博客 1562

游戏的AOI算法

本文参考了一些Blog: http://blog.youkuaiyun.com/zhanghefu/article/details/25833535 云风的Blog 并进行整理而写。 AOI(Area Of Interest),中文就是感兴趣区域。通俗一点说,感兴趣区域就是玩家在场景实时看到的区域;也就是AOI会随着英雄的移动改变而改变。游戏的AOI算法应该算作游戏的基础核心了,许多逻辑都

sigh667的专栏 2404

AOI:实现原理

1 AOI简介 AOI的全称叫Area Of Interest,感兴趣的区域。这个技术可以看做是服务器广播的一种。在MMO类型的游戏里是必须存在的。 MMO类型的游戏都会有野外和主城场景,一般来说,服务器只会同步你周边多少半径以内的玩家给你,太远的一是玩家屏幕看不到没有意义,二是同步太多的玩家对于服务器压力成倍数上涨。 想象一下,如果一个区域内有100个人,这些人可能都在不停的走路,如果是广播形式的话,那每一个人移动都要向另外的100个人进行位置同步。假如服务器每50ms同步一次玩家位置,那么服务器处

Peter的博客 2139

游戏思考18:AOI视野同步算法介绍和简单实现(未完待续8/3)

AOI方案简单理解: 暴力、九宫格、灯塔、十字链表、四叉树

谢白羽 4473

Unity进阶教程AOI算法原理详解

有时候,我们会遇到一个移动中的角色,移动的过程中,突然传入玩家A的视野, 但是玩家A的客户端不知道这个角色要走向何方,所以不知道如何处理,对于这种突然闯入视野的情况,我们移动,会重新发送一个移动事件,让玩家A的客户端能补齐对应的移动。对于攻击与死亡,也类似。这样,遍历这9个块里面的玩家,把玩家A的状态同步出去,对于其它玩家也类似。Step2: 视野大小确定后,玩家A感兴趣的区域是以它为中心,固定的视野大小为范围,将视野范围分成”九宫格”来作为玩家A周围的AOI区域,如下图的9个红色的框,包围蓝色的玩家;

voidinit的专栏 1419

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2630

游戏中AOI视野算法

AOI(Area Of Interest),中文就是感兴趣区域。通俗一点说,感兴趣区域就是玩家在场景实时看到的区域;也就是AOI会随着英雄的移动改变而改变。游戏的AOI算法应该算作游戏的基础核心了,许多逻辑都是因为AOI进出事件驱动的,许多网络同步数据也是因为AOI进出事件产生的。因此,良好的AOI算法和基于AOI算法的优化,是提高游戏性能的关键。 我在实践中所熟知的游戏AOI算法大致有4种,...

ybn6775的博客 8170

GB/T 27930-2023协议升级与CANoe仿真测试实践

本文深入解析GB/T 27930-2023协议的核心升级,包括A/B类系统分类与EVIN码引入,并详细指导如何使用CANoe搭建仿真测试环境、编写CAPL脚本及利用DLL库进行一致性验证与故障注入测试,助力开发人员确保电动汽车充电通信的合规性与稳定性。

y7z8a的博客 538

VC Spyglass调试秘籍:从Lint报错到代码修复的完整工作流

本文详细介绍了VC Spyglass调试的完整工作流,重点解析了如何高效定位和修复Lint检查中常见的XMRE-L跨模块引用错误。通过对比GUI与命令行(vc_static_shell)双模式调试技巧,并结合TCL脚本实现批量处理与规则豁免,帮助数字设计工程师系统化地提升代码调试效率与质量。

weixin_29246195的博客 575

aoi的实现原理

1 AOI简介 AOI的全称叫Area Of Interest,感兴趣的区域。这个技术可以看做是服务器广播的一种。在MMO类型的游戏里是必须存在的。 MMO类型的游戏都会有野外和主城场景,一般来说,服务器只会同步你周边多少半径以内的玩家给你,太远的一是玩家屏幕看不到没有意义,二是同步太多的玩家对于服务器压力成倍数上涨。 想象一下,如果一个区域内有100个人,这些人可能都在不停的走路,如果是广播形式的话,那每一个人移动都要向另外的100个人进行位置同步。假如服务器每50ms同步一次玩家位置,那么服务器处

awhlmcyn的博客 4081

ESP32学习,驱动LED点阵屏,SD卡播放GIF动图

搬运就可以实现效果,如果有不足,请批评指正。下步该学一下如何文章上视频了,老是截图不方便展示效果。

u011625956的博客 1868

java aoi 服务器地图_游戏服务器AOI的实现

在一个场景里,怪物A攻击了玩家B,玩家B掉了5血量。玩家B反击,怪物A掉了10血量。玩家C在旁边观看了这一过程,而在远处的玩家D对这一过程毫无所知。这是MMO游戏中很常见的一情景,从程序逻辑的角度来看,把它拆分成以下几部分怪物A感知玩家B在攻击距离内,释放了技能,并把整个过程广播给附近的玩家B、玩家C玩家B感知怪物A在攻击距离内,释放了技能进行反击,并把整个过程广播给自己(玩家B)、附近的玩家C玩...

weixin_26976635的博客 1053

从MCU到MPU:瑞萨RZN2L上手初体验,给Cortex-M工程师的Cortex-R52入门避坑指南

本文详细介绍了从MCU到MPU的过渡经验,特别是瑞萨RZN2L开发板的实战避坑指南。针对Cortex-M工程师转向Cortex-R52内核的挑战,文章深入解析了启动流程、内存管理、中断响应等九大本质差异,并提供了硬件设计陷阱和软件迁移的实用技巧,帮助开发者快速适应MPU开发环境。

weixin_29158413的博客 256

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1840

游戏服务器AOI的实现

在一个场景里,怪物A攻击了玩家B,玩家B掉了5血量。玩家B反击,怪物A掉了10血量。玩家C在旁边观看了这一过程,而在远处的玩家D对这一过程毫无所知。这是MMO游戏中很常见的一情景,从程序逻辑的角度来看,把它拆分成以下几部分可以看到,整个逻辑都是以位置为基础来进行的,玩家需要知道周边发生了什么。通常把玩家周边的这块区域叫做玩家感兴趣的区域,即AOI(Area Of Interest),其大小即玩家的视野大小,上图画出了C、D这两个玩家的AOI。

m0_73915763的博客 782

提示工程架构师揭秘:prompt优化中的“隐性成本”如何控制?

当我们谈论Prompt优化时,往往聚焦于“效果提升”——比如让模型生成更准确的回答、更符合要求的格式。优化的本质是“成本-收益”的平衡。那些看不见的“隐性成本”,比如反复调试的时间消耗、复杂Prompt带来的认知负荷、长文本导致的系统资源浪费、后续维护的无穷麻烦,往往会在长期运营中成为压垮效率的“稻草”。本文将从提示工程架构师的视角,揭秘Prompt优化中的“隐性成本”到底是什么、如何量化,以及通过哪些工程化手段将这些“看不见的消耗”转化为“可控制的效率”。

操作系统内核探秘的博客 700

AOI视野常识介绍

本文比较了四种AOI算法在游戏开发中的应用。九宫格算法实现简单但精度有限,十字链表适合线性分布场景,灯塔算法优化视野边界处理。四叉树算法因其动态分区特性,特别适合SLG游戏大世界场景:能高效处理不均匀分布对象,支持动态视野缩放,具有优异的查询性能和内存利用率,并可扩展支持战争迷雾等系统。相比其他算法,四叉树在SLG大世界管理上展现出明显优势,是处理复杂战略视图的理想选择。

流子的专栏 1248

Cesium中级开发教程之二十二:视锥体

教程示例网站:https://thomaz529.github.io。

883

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 操作系统学习小结
下一篇: 游戏排行榜
卜睵·-嗳
博客等级 码龄5年 76粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值