首页 > 其他分享 >【Unity】经典四叉树的实现以及和无空间划分加速下的效率对比分析

【Unity】经典四叉树的实现以及和无空间划分加速下的效率对比分析

时间:2024-08-28 18:25:44浏览次数:12  
标签:方式 对象 划分 插入 Unity 经典 空间 四叉树

背景

假如场景中存在大量的对象,需要快速找到某个范围内的所有对象,如果通过传统的方式,就需要对所有的物体遍历,依次判断是否在范围中,这样非常耗时。所以通过空间划分的方法将其加速,本文中采用四叉树的方式,从实现思想和代码层面对效率进行分析。

思想

在空间划分算法中首先需要对所有的对象进行维护,按照某种方式存放起来,也就是插入(Insert),之后再进行搜索(Query)

在插入前首先需要规定这个树最大的深度maxDepth,这里为画图方便,设定为3层,当到达最深的层,则不再划分。

插入

对于每个对象,都执行以下的插入操作:

(1)首先将一个物体放入一个定义了边界的空间,如果这个物体和该空间有重叠,则执行插入。
(2)在插入前,如果当前层没有到达最深的层,将该区域划分成四个子区域。
(3)对每个子区域,都递归地执行一遍(1)。
(4)重复(1)(2)(3)。

压线处理

假如物体和某层的划分线重叠了,一般有两种处理方式。

  • 方式1:由两个子区域分别维护,这样的缺点是比较浪费内存空间。

  • 方式2:由当前层维护,不插入到子区域。

搜索

实现

假如场景中存在1000个对象,每个对象都是一个逻辑实体,会在每帧和周围半径内的其他对象进行交互判断。那么在传统方式下,每个对象都要去依次遍历其他的所有对象,判断它们是否落在自己的半径内,这样需要花费O(n²)的时间,非常耗时。所以本文通过

标签:方式,对象,划分,插入,Unity,经典,空间,四叉树
From: https://www.cnblogs.com/JimmyZou/p/18385213

相关文章

  • 张锡纯 经典名方
    http://www.wanyingcha.cn/article-detail/NZynDKMB 张锡纯(1860年-1933年),字寿甫,籍山东诸城,河北省盐山县人,中西医汇通学派的代表人物之一,近现代中国中医学界的医学泰斗。1916年在沈阳创办我国第一间中医医院——立达中医院。1928年定居天津,1930年创办国医函授学校,培养了不少中医......
  • Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在移动端开发中,数据加密是确保数据传输和存储安全的重要手段。常见的加密算法包括对称加密算法(如AES)、非对称加密算法(如RSA)、散列算法(如SHA-256),以及消息认证码(如......
  • Android经典实战之使用compose时一般用一个activity还是多个
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在使用JetpackCompose开发Android应用时,选择使用一个Activity还是多个Activity主要取决于应用的架构和复杂性。以下是一些权衡和指导建议,可以帮助你做出决......
  • Unity嵌入安卓工程黑屏问题
    最近遇到了个很怪异的问题:UnityAdroid嵌入其它工程开启unity,闪过logo后黑屏持续10多秒。大致经过:Unity导出AndroidStudio工程,并将导出的unityLibrary嵌入其它已经做好的AndroidStudio工程,直接从Unity导出的AndroidStudio工程直接连接手机调试就不会出现卡顿现象,所以......
  • 【Unity基础】Unity中移动物体的8种方法
    本文主要介绍物体线性移动方法,是基于3D场景介绍的。当然在2D场景中也有对应的方法。首先物理学上,物体的运动可以分为运动学和动力学,二者的区别在于是否受外力影响。具体可以参看《什么是运动学和动力学》。从运动学方面,是通过改变物体的位置来实现的。在Unity中,可以使用Tran......
  • 【Unity输入】Unity输入方式总结
    在Unity中,常见的输入方式包括以下几种:1.键盘输入Input.GetKey():用于检测特定键是否被按下。例如,用Input.GetKey(KeyCode.W)检测玩家是否按下“W”键来控制角色移动。Input.GetKeyDown():用于检测某个键在当前帧是否被按下。Input.GetKeyUp():用于检测某个键在当前帧是否......
  • Unity 3D学习资料集合
    本文包含了unity3D游戏开发相关的学习资料,包含了入门、进阶、性能优化、面试和书籍等学习资料,含金量非常高,在这里分享给大家,欢迎收藏。学习社区1.Unity3D开发者Unity3D开发者论坛是一个专注于Unity引擎的开发者社区。在这个论坛上,开发者们可以分享自己的项目经验、技术问......
  • 免费、开源、详细完整的unity游戏、游戏源码、教程:人工智能分析和处理对话的美好三维
    这份unity游戏、游戏源码、教程:完全免费,完全开源,完整详细,通俗易懂,适合初学者入门,定期更新。我不想和任何人说话,任何人不要跟我说话,不要打扰我,我要安安静静的写。我解释一下原因:俗话说“道不同,不相与谋。”不是一个情感世界的人,就不该相互说话,两个不同情感世界的人,心灵是无法彼此......
  • 【MySQL】mysql索引和事务(面试经典问题)
    欢迎关注个人主页:逸狼创造不易,可以点点赞吗~如有错误,欢迎指出~目录mysql索引代价查看索引创建索引 删除索引索引背后的数据结构B树B+树B+树与B树的区别B+树的优势mysql事务 事务涉及的四个核心特性:隔离性详细解释脏读不可重复读幻读隔离性的四......
  • 目录PyCharm Community Edition、python3.11、pythonProject之间的关系
    PyCharmCommunityEdition类型:PyCharmCommunityEdition是由JetBrains公司提供的免费、开源的集成开发环境(IDE)。用途:它专门为Python开发设计,提供了代码编辑、运行、调试、测试等功能。特点:包括智能代码补全、代码分析、图形化界面设计、版本控制集成等高级功能。Pyt......