Unity学习(十三)场景优化之四叉树
http://blog.sina.com.cn/s/blog_89d90b7c0102wyfw.html
四叉树是在二维图片中定位像素的唯一适合的算法。因为二维空间(图经常被描述的方式)中,平面像素可以重复的被分为四部分,树的深度由图片、计算机内存和图形的复杂度决定。
四叉树(quad-tree)是一种数据结构,是一种每个节点最多有四个子树的数据结构。四叉树可以用来在数据库中放置和定位文件(称作记录或键)。这一算法通过不停的把要查找的记录分成4部分来进行匹配查找直到仅剩下一条记录为止。在树中,记录被存储在叶子的位置上。这一名字的由来是因为记录被存储在端点上,它们上面再没有节点了。分支被称作节点。数的顺序是每节点的分支(也称孩子)数。在四叉树中,每个节点通常有4个孩子,因此顺序是4。四叉树的叶子数也是4。为达到想要的记录所进行的查找操作次数成为树的深度。
四叉树在游戏场景中的应用非常普遍,比如大场景的物件动态加载,NPC动态加载等,只用显示玩家周围的对象,能非常有效的降低场景CPU和GPU消耗。
四叉树的查找算法,通过遍历子节点只到找到与之相交的叶子节点,就不做记录了,在这里将玩家移动时,周围物件显示和隐藏的过程记录下来,以便日后能快速回忆。
主角刚进入游戏场景时
(蓝色表示【玩家所在叶子节点】,绿色表示【进入列表】,白色表示【显示列表】)
焦点不动时
1.没有【当前显示列表】,那么焦点周围的点都为【进入列表】
2.【进入列表】中的叶子节点执行swapIn方法加入【进入队列】
刷新队列
3.如果叶子节点都执行过swapIn,并且可见,就加入到当前【当前显示列表】,并从【进入队列】中移除
主角移动时
(绿色表示【进入列表】,红色表示【出去列表】)
当焦点移动时
1.通过【当前显示列表】和【距离】筛选出此时的【进入列表】和【出去列表】
2.【进入列表】中的叶子节点执行swapIn方法加入【进入队列】
3.【出去列表】中的叶子节点执行swapOut方法加入【出去队列】
刷新队列
4.如果叶子节点都执行过swapIn,并且可见,就加入到当前【当前显示列表】,并从【进入队列】中移除
5.如果叶子节点都执行过swapOut,并且不可见,就从【出去队列】中移除
学习参考:
http://www.unity.5helpyou.com/3416.html
Unity学习(十三)场景优化之四叉树的更多相关文章
- 2019年Unity学习资源指南[精心整理]
前言 进入一个领域,最直接有效的方法就是,寻找相关综述性文章,首先你需要对你入门的领域有个概括性的了解,这些包括: 1.主流的学习社区与网站. 2.该领域的知名大牛与热心分享的从业者. 3.如何有效的 ...
- 如何学习Linux性能优化?
如何学习Linux性能优化? 你是否也曾跟我一样,看了很多书.学了很多 Linux 性能工具,但在面对 Linux 性能问题时,还是束手无策?实际上,性能分析和优化始终是大多数软件工程师的一个痛点.但 ...
- 关于Unity中的UGUI优化,你可能遇到这些问题
https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...
- Unity Shader着色器优化
https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247493518&idx=1&sn=c51b92e9300bcf ...
- Unity开发Android应用优化指南(下)
http://forum.china.unity3d.com/thread-27044-1-1.html 在Unity开发Android应用优化指南(上)一文中,从游戏性能,脚本等方面进行了分析和总结 ...
- Unity开发Android应用优化指南(上)
http://forum.china.unity3d.com/thread-27037-1-2.html 如今越来越多的开发者使用Unity开发Android及iOS项目,开发过程中难免会遇到一些性能 ...
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...
- 3D场景优化
一) 有效的性能评测 对于任何一个3D应用程序来说,追求场景画面真实感是一个无止尽的目标,其结果就是让我们的场景越来越复杂,模型更加精细,这必然给图形硬件带来极大的负荷以致于无法达到实时绘制帧率.因此 ...
- 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置
[转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...
随机推荐
- [异步][jms][activeMq]怎样做到重试机制不会导致一条消息被多次运行.
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/fei33423/article/details/32723571 淘宝海量存储之单机事务面临的问题及 ...
- Appium移动自动化配置-ios&安卓
官网安装参考:https://www.npmjs.com/package/appium Appium安装 1.安装nodejs 2.安装appium iOS侧环境安装 1.安装xcode 2.安装Xc ...
- ios 7 Autolayout bug
ios 7 Autolayout bug 错误类型:NSInternalInconsistencyException(SIGABRT) 详情:Auto Layout still required af ...
- oracle_sql的用法?
本机连接oracle 数据库?打开cmd ----> 不同的用户有不同的用户名密码 ----> sqlplus scott/tiger(安装oracle数据库预留的用户)---- 回车 - ...
- POJ 3744 Scout YYF I:概率dp
题目链接:http://poj.org/problem?id=3744 题意: 有n个地雷,位置为pos[i]. 在每个位置,你向前走一步的概率为p,向前走两步的概率为1-p. 你的初始位置为1. 问 ...
- html5--1.15 style元素与HTML样式基础
html5--1.15 style元素与HTML样式基础 学习要点: 1.引入样式的三种方式2.了解style元素插入内联样式表与内部样式表 1.引入样式的三种方式 1.外部样式表:通过 link元素 ...
- php设置文件编码
<?php @header('Content-type: text/html;charset=UTF-8'); ?>
- Servlet_03_部署描述符
二.参考文档 1.Servlet 3.0 之 部署描述符 2.web.xml配置详解 部署描述符文件
- Java_HTTP_01_HttpClient
一. 二.参考文档 1. HttpClient官方文档 HttpClient官方文档中文翻译 1.HttpClient 4 实现文件下载 2.httpclient 上传文件.下载文件 3.httpcl ...
- find命令的基础用法以及按文件修改时间查找文件
一般文件查找方法: find 命令学好是一件很有趣的事情,也可以帮你在查找系统文件的时候事倍功半,还可以与正则表达式结合使用,功能强大,是一个很好的查找工具.可以整体提高你的系统管理能力. 基础用法 ...