# Unity-FixSystem
利用Unity实现的2D碰撞检测,并添加四叉树优化
### 使用分离轴算法实现的碰撞检测,模块已经独立出去一份
1.凸多边形与凸多边形
2.凸多边形与圆形
3.圆形与圆形
### 使用四叉树算法进行场景碰撞优化
### 在本地模拟的帧同步
### 四叉树原理
四叉树原理来源文章:https://www.cnblogs.com/vana/p/10948789.html
-- 利用四叉树思想分割场景中的所有碰撞器
-- 为整个场景构建一个四叉树,将场景中所有的碰撞器插入到该四叉树中
-- 插入规则:(从根节点开始)
如果当前节点已经分裂(即已经创建了子节点),则向子节点中插入
如果当前节点没有分裂,则插入到当前节点
插入之后:
-- 当前节点存储的碰撞器列表大于规定上限:进行分裂,并将所有碰撞器分发给分裂后的子节点
-- 当前节点存储的碰撞器列表小于规定上限,没有操作
分发规则:
根据碰撞器在场景的位置进行分发,可以知道有以下三种情况:
1.完全位于某个象限内部,则将碰撞器插入到该节点中
2.完全位于某两个象限,则将碰撞器插入到这两个节点中
3.位于四个象限,则将碰撞器插入到这四个节点中
此时,某些位于边界的碰撞器则会在多个节点中存在
时间复杂度:
假设有100个物体,原始碰撞检测则需要两层循环(外层循环 0,98)(内层顺换 1,99)
即:99 + 98 + ... + 1 = (99 + 1) * 99 / 2 = 4950
时间复杂度为O(n^2)
使用四叉树检测:
这里只计算一种最优解的情况,只是用于简单的对比,实际情况只会更复杂,
将四叉树分为两层,则叶节点的数量为16个,将100个碰撞器平均的存储到16个节点中,即每个节点最多为7个碰撞器
再对每个节点进行遍历检测,则计算量为 (6 + 1) * 6 / 2 = 21;再计算所有区域,即21 * 16 = 336次
BUG:由于分布规则产生的Bug,当两个碰撞器同时在边界上时,两个碰撞器会加入到两个区间,则会发生两个区间都去检测这两个碰撞器是否发生碰撞,重复判断
修改:
修改分裂规则:
1.完全位于某个象限内部,则将碰撞器插入属于该象限的节点中
2.否则就不插入,仍放在当前节点
修改碰撞检测逻辑,将碰撞逻辑分为相互碰撞和独立碰撞
1.相互碰撞:只有一个碰撞器列表,列表中所有碰撞器两两进行碰撞检测
适用于每个节点存储的碰撞器列表
2.独立碰撞:有两个碰撞器列表,一个列表的碰撞器只去跟另外一个列表的碰撞器进行碰撞检测
适用于每个节点存储的碰撞器列表 和 其所有父节点存储的碰撞器列表
没有合适的资源?快使用搜索试试~ 我知道了~
利用Unity实现的碰撞检测 利用Unity实现的碰撞检测 利用Unity实现的碰撞检测
共262个文件
meta:147个
cs:102个
txt:3个
需积分: 5 0 下载量 86 浏览量
2024-01-03
10:48:27
上传
评论
收藏 5.85MB ZIP 举报
温馨提示
利用Unity实现的碰撞检测 利用Unity实现的碰撞检测 利用Unity实现的碰撞检测 利用Unity实现的碰撞检测
资源推荐
资源详情
资源评论
收起资源包目录
利用Unity实现的碰撞检测
利用Unity实现的碰撞检测
利用Unity实现的碰撞检测 (262个子文件)
Fix64AcosLut.cs 2.98MB
Fix64AcosLut.cs 2.98MB
Fix64TanLut.cs 2.97MB
Fix64TanLut.cs 2.97MB
Fix64SinLut.cs 2.86MB
Fix64SinLut.cs 2.86MB
TSMatrix4x4.cs 45KB
TSMatrix4x4.cs 45KB
Fix64.cs 37KB
Fix64.cs 37KB
TSVector.cs 31KB
TSVector.cs 31KB
Fix64.cs 29KB
TSVector4.cs 28KB
TSVector4.cs 28KB
TSMatrix.cs 26KB
TSMatrix.cs 26KB
TSQuaternion.cs 20KB
TSQuaternion.cs 20KB
TSVector2.cs 18KB
TSVector2.cs 18KB
TSMath.cs 17KB
TSMath.cs 17KB
QuadNode.cs 12KB
QuadNode.cs 11KB
QuadNode.cs 11KB
TSRandom.cs 8KB
TSRandom.cs 8KB
PhysicsManager.cs 8KB
PhysicsManager.cs 7KB
PhysicsWorld.cs 7KB
PhysicsWorld.cs 6KB
PhysicsWorld.cs 6KB
LogicCore.cs 5KB
PhysicsManager.cs 5KB
BaseCollider.cs 3KB
BaseCollider.cs 3KB
NetClient.cs 3KB
Rectangle.cs 3KB
BaseCollider.cs 3KB
World.cs 3KB
PolygonCollider.cs 3KB
Rectangle.cs 3KB
Rectangle.cs 3KB
BoxCollider.cs 2KB
NetServer.cs 2KB
OBBShape.cs 2KB
PolygonCollider.cs 2KB
PolygonCollider.cs 2KB
BoxCollider.cs 2KB
BoxCollider.cs 2KB
PlayerMono.cs 2KB
Entity.cs 2KB
OBBShape.cs 2KB
OBBShape.cs 2KB
WorldMono.cs 2KB
CircularShape.cs 2KB
RayShape.cs 2KB
SkillEntity.cs 2KB
CircularCollider.cs 2KB
EntityMono.cs 2KB
PlayerEntity.cs 2KB
Entity.cs 1KB
PhysicsMono.cs 1KB
OBB.cs 1KB
World.cs 1KB
TSTransform.cs 1KB
OBB.cs 1KB
OBB.cs 1KB
CircularCollider.cs 1KB
CircularCollider.cs 1KB
PhysicsMono.cs 1KB
PhysicsMono.cs 1KB
CircularShape.cs 1KB
MonsterMono.cs 1KB
FrameData.cs 1KB
BattleEntity.cs 1KB
CircularShape.cs 990B
ColliderTest.cs 982B
PlayerMono.cs 902B
VectorTools.cs 838B
ColliderTest.cs 782B
EventManager.cs 694B
BaseTrigger.cs 692B
VectorTools.cs 650B
SkillMono.cs 598B
CircularTrigger.cs 576B
FixTransform.cs 550B
BattleEntity.cs 544B
MonsterEntity.cs 522B
ThreadManager.cs 473B
ReleaseData.cs 456B
PlayerEntity.cs 427B
EventEnum.cs 386B
FixHelper.cs 337B
BattleDebug.cs 241B
MonsterEntity.cs 233B
IShape.cs 177B
FrameInput.cs 135B
FrameState.cs 134B
共 262 条
- 1
- 2
- 3
资源评论
csdn_aspnet
- 粉丝: 8307
- 资源: 64
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功