diff --git a/Assets/Quadtree Collider Detection/MyGizmos.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Gizmos/MyGizmos.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/MyGizmos.cs
rename to Assets/Quadtree Collider Detection/QuadtreeCollider/Gizmos/MyGizmos.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs
index 14e1994..ef04966 100644
--- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs
+++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Quadtree.cs
@@ -16,7 +16,11 @@ internal partial class Quadtree : MonoBehaviour
///
/// 碰撞器到节点的映射表
///
- private readonly Dictionary collidersToNodes = new Dictionary();
+ private Dictionary collidersToNodes = new Dictionary();
+ ///
+ /// 需要移除的碰撞器节点
+ ///
+ private readonly List needRemoveColliders = new List();
private void Awake()
{
@@ -29,6 +33,12 @@ private void Update()
// 更新四叉树
UpdateQuadtree();
+ // 移除需要移除的碰撞器
+ RemoveNeedRemoveColliders();
+
+ // 移除所有已被销毁的碰撞器的映射
+ RemoveDestroyedCollidersToNodes();
+
// 进行检测
Detect();
}
@@ -38,8 +48,8 @@ private void Update()
///
private void UpdateQuadtree()
{
- // 从根节点开始更新碰撞器位置
- QuadtreeNode.OperationResult positionResult = root.UpdatePosition();
+ // 从根节点开始更新碰撞器位置并移除已经被销毁的碰撞器
+ QuadtreeNode.OperationResult positionResult = root.UpdatePositionAndRemoveDestroyedCollider();
// 更新映射表
collidersToNodes.OverlayMerge(positionResult.CollidersToNodes).RemoveOnValueIsNull();
@@ -52,6 +62,35 @@ private void UpdateQuadtree()
// 但这些节点需要进行最大半径更新,否则新节点的最大半径是负无穷,会导致生长的这一帧碰撞检测错误
}
+ ///
+ /// 移除需要移除的碰撞器
+ ///
+ private void RemoveNeedRemoveColliders()
+ {
+ // 遍历所有需要移除的碰撞器并移除
+ needRemoveColliders.ForEach(node =>
+ {
+ // 不是 null 的移除,是 null 的是因为碰撞机被销毁而需要移除的,这些需要用另外的方式处理
+ if(node != null)
+ {
+ // 移除碰撞机并在需要的时候进行合并
+ ImmediateRemoveColliderWithMerge(node);
+ }
+ });
+
+ // 清空需要移除的碰撞机列表
+ needRemoveColliders.Clear();
+ }
+
+ ///
+ /// 移除所有已被销毁的碰撞器的映射
+ ///
+ private void RemoveDestroyedCollidersToNodes()
+ {
+ // 从映射表里过滤出碰撞器不为 null 的映射,组成新的映射表
+ collidersToNodes = collidersToNodes.Where(pair => pair.Key != null).ToDictionary(pair => pair.Key, pair => pair.Value);
+ }
+
///
/// 进行碰撞检测
///
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs
index ca4d5ce..b439c7b 100644
--- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs
+++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/Quadtree/Singleton.cs
@@ -50,22 +50,38 @@ public static QuadtreeNode.OperationResult AddCollider(QuadtreeCollider collider
}
///
- /// 从四叉树中移除碰撞器,符合条件时会合并节点
+ /// 移除碰撞器,到下次进行检测时才会真正移除碰撞器,符合条件时会合并节点
+ ///
+ ///
+ public static void RemoveColliderWithMerge(QuadtreeCollider collider)
+ {
+ // 如果没有实例,不进行处理,这一步是必须的,否则在游戏关闭时会发生销毁时四叉树实例一次次出现,进而导致异常
+ if (instance == null)
+ {
+ return;
+ }
+
+ // 添加到需要移除的碰撞器列表里
+ Instance.needRemoveColliders.Add(collider);
+ }
+
+ ///
+ /// 立即从四叉树中移除碰撞器,符合条件时会合并节点
///
///
///
- public static QuadtreeNode.OperationResult RemoveColliderWithMerge(QuadtreeCollider collider)
+ public static QuadtreeNode.OperationResult ImmediateRemoveColliderWithMerge(QuadtreeCollider collider)
{
- return RemoveCollider(collider, true);
+ return ImmediateRemoveCollider(collider, true);
}
///
- /// 从四叉树中移除碰撞器,不进行合并
+ /// 立即从四叉树中移除碰撞器,不进行合并
///
///
- internal static QuadtreeNode.OperationResult RemoveColliderWithOutMerge(QuadtreeCollider collider)
+ internal static QuadtreeNode.OperationResult ImmediateRemoveColliderWithOutMerge(QuadtreeCollider collider)
{
- return RemoveCollider(collider, false);
+ return ImmediateRemoveCollider(collider, false);
}
///
@@ -74,7 +90,7 @@ internal static QuadtreeNode.OperationResult RemoveColliderWithOutMerge(Quadtree
///
/// 是否需要在需要合并的时候进行合并
///
- internal static QuadtreeNode.OperationResult RemoveCollider(QuadtreeCollider collider, bool withMerge)
+ internal static QuadtreeNode.OperationResult ImmediateRemoveCollider(QuadtreeCollider collider, bool withMerge)
{
// 如果没有实例,不进行处理,这一步是必须的,否则在游戏关闭时会发生销毁时四叉树实例一次次出现,进而导致异常
if(instance == null)
@@ -92,11 +108,11 @@ internal static QuadtreeNode.OperationResult RemoveCollider(QuadtreeCollider col
QuadtreeNode.OperationResult result;
if (withMerge)
{
- result = Instance.collidersToNodes[collider].RemoveColliderFromSelfWithMerge(collider);
+ result = Instance.collidersToNodes[collider].ImmediateRemoveColliderFromSelfWithMerge(collider);
}
else
{
- result = Instance.collidersToNodes[collider].RemoveColliderFromSelfWithOutMerge(collider);
+ result = Instance.collidersToNodes[collider].ImmediateRemoveColliderFromSelfWithOutMerge(collider);
}
if (result.Success)
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs
index 67b290f..96ac6e4 100644
--- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs
+++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/RemoveCollider.cs
@@ -13,7 +13,7 @@ internal partial class QuadtreeNode
///
///
///
- internal OperationResult RemoveColliderFromSelfWithOutMerge(QuadtreeCollider collider)
+ internal OperationResult ImmediateRemoveColliderFromSelfWithOutMerge(QuadtreeCollider collider)
{
bool listResult = colliders.Remove(collider);
@@ -39,10 +39,10 @@ internal OperationResult RemoveColliderFromSelfWithOutMerge(QuadtreeCollider col
///
///
///
- internal OperationResult RemoveColliderFromSelfWithMerge(QuadtreeCollider collider)
+ internal OperationResult ImmediateRemoveColliderFromSelfWithMerge(QuadtreeCollider collider)
{
// 移除碰撞器
- OperationResult result = RemoveColliderFromSelfWithOutMerge(collider);
+ OperationResult result = ImmediateRemoveColliderFromSelfWithOutMerge(collider);
// 移除失败,不需要合并,直接返回结果
if(!result.Success)
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs
index 3c5a286..02d47bd 100644
--- a/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs
+++ b/Assets/Quadtree Collider Detection/QuadtreeCollider/Quadtree/QuadtreeNode/Update.cs
@@ -10,24 +10,24 @@ internal partial class QuadtreeNode
/// 更新碰撞器位置
///
///
- internal OperationResult UpdatePosition()
+ internal OperationResult UpdatePositionAndRemoveDestroyedCollider()
{
if (HaveChildren())
{
// 有子节点,通知子节点更新碰撞器位置
- return UpdateChildrenPosition();
+ return UpdateChildrenPositionAndRemoveDestroyedCollider();
}
else
{
// 没有子节点,更新当前节点内的碰撞器位置
- return UpdateSelfPosition();
+ return UpdateSelfPositionAndRemoveDestroyedCollider();
}
}
///
/// 更新子节点的碰撞器位置
///
- private OperationResult UpdateChildrenPosition()
+ private OperationResult UpdateChildrenPositionAndRemoveDestroyedCollider()
{
// 更新碰撞器位置必定成功
OperationResult result = new OperationResult(true);
@@ -36,7 +36,7 @@ private OperationResult UpdateChildrenPosition()
foreach (QuadtreeNode child in children)
{
// 通知子节点更新碰撞器位置
- OperationResult childResult = child.UpdatePosition();
+ OperationResult childResult = child.UpdatePositionAndRemoveDestroyedCollider();
// 将子节更新导致的映射表更新合并到总结果里
result.CollidersToNodes.OverlayMerge(childResult.CollidersToNodes);
@@ -60,11 +60,14 @@ private OperationResult UpdateChildrenPosition()
///
/// 更新当前节点内的碰撞器的位置
///
- private OperationResult UpdateSelfPosition()
+ private OperationResult UpdateSelfPositionAndRemoveDestroyedCollider()
{
// 更新碰撞器位置必定成功
OperationResult result = new OperationResult(true);
+ // 移除所有为空的碰撞器,这些是在外部被销毁的碰撞器
+ colliders.RemoveAll(collider => collider == null);
+
// 移除所有当前节点保存的、已经离开当前节点范围的碰撞器,并将这些碰撞器保存起来
OperationResult removeResult = GetAndRemoveCollidersOutOfArea();
@@ -101,7 +104,7 @@ private OperationResult GetAndRemoveCollidersOutOfArea()
foreach (QuadtreeCollider collider in new List(result.CollidersToNodes.Keys))
{
// 移除碰撞器
- OperationResult removeResult = Quadtree.RemoveColliderWithOutMerge(collider);
+ OperationResult removeResult = Quadtree.ImmediateRemoveColliderWithOutMerge(collider);
// 记录映射表的变化
result.CollidersToNodes.OverlayMerge(removeResult.CollidersToNodes);
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Dictionary Test/DictionaryTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Dictionary Test/DictionaryTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Dictionary Test/DictionaryTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Dictionary Test/DictionaryTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Event Test/SubscribeTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Event Test/SubscribeTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Event Test/SubscribeTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Event Test/SubscribeTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/IInterfaceOnMonoDestroyTestInterface.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/IInterfaceOnMonoDestroyTestInterface.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/IInterfaceOnMonoDestroyTestInterface.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/IInterfaceOnMonoDestroyTestInterface.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/Interface On Mono Destroy.asmdef b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/Interface On Mono Destroy.asmdef
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/Interface On Mono Destroy.asmdef
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/Interface On Mono Destroy.asmdef
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/InterfaceOnMonoDestroyTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/InterfaceOnMonoDestroyTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/InterfaceOnMonoDestroyTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/InterfaceOnMonoDestroyTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/InterfaceOnMonoDestroyTestMono.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/InterfaceOnMonoDestroyTestMono.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Interface On Mono Destroy/InterfaceOnMonoDestroyTestMono.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Interface On Mono Destroy/InterfaceOnMonoDestroyTestMono.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/List Test/ListTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/List Test/ListTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/List Test/ListTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/List Test/ListTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Overload Test/OverloadTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Overload Test/OverloadTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Overload Test/OverloadTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Overload Test/OverloadTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecCenterTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Rect Test/RecCenterTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecCenterTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Rect Test/RecCenterTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecContainstTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Rect Test/RecContainstTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RecContainstTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Rect Test/RecContainstTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RectNewSetSpeedTest.cs b/Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Rect Test/RectNewSetSpeedTest.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Editor/API Tests/Rect Test/RectNewSetSpeedTest.cs
rename to Assets/Quadtree Collider Detection/Tests/00 API Tests/Editor/Rect Test/RectNewSetSpeedTest.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute Time.unity b/Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/Enter Execute Time.unity
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute Time.unity
rename to Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/Enter Execute Time.unity
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting b/Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting
rename to Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/Enter Execute TimeSettings.lighting
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/EnterLoger.cs b/Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/EnterLoger.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/EnterLoger.cs
rename to Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/EnterLoger.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/TriggetMove.cs b/Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/TriggetMove.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/OnTriggerEnterExecuteTime/TriggetMove.cs
rename to Assets/Quadtree Collider Detection/Tests/01 OnTriggerEnterExecuteTime/TriggetMove.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Loger.cs b/Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Loger.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Loger.cs
rename to Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Loger.cs
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test Scene.unity b/Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Test Scene.unity
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test Scene.unity
rename to Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Test Scene.unity
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test SceneSettings.lighting b/Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Test SceneSettings.lighting
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Test SceneSettings.lighting
rename to Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Test SceneSettings.lighting
diff --git a/Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Waiter.cs b/Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Waiter.cs
similarity index 100%
rename from Assets/Quadtree Collider Detection/QuadtreeCollider/Tests/Trigger Execute Time Test/Waiter.cs
rename to Assets/Quadtree Collider Detection/Tests/02 Trigger Execute Time Test/Waiter.cs
diff --git a/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/DestroyOnCollisionEnter.cs b/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/DestroyOnCollisionEnter.cs
new file mode 100644
index 0000000..6470aeb
--- /dev/null
+++ b/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/DestroyOnCollisionEnter.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace MtC.Tools.QuadtreeCollider.Test
+{
+ ///
+ /// 当发生碰撞时销毁物体的组件,用于测试延迟禁用碰撞器的功能
+ ///
+ [RequireComponent(typeof(CircleQuadtreeCollider))]
+ public class DestroyOnCollisionEnter : MonoBehaviour, IOnQuadtreeCollisionEnter
+ {
+ public void OnQuadtreeCollisionEnter(QuadtreeCollider collider)
+ {
+ Destroy(gameObject);
+
+ Debug.Log(gameObject.name + " 销毁");
+ }
+ }
+}
diff --git a/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/DisableColliderOnCollisionEnter.cs b/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/DisableColliderOnCollisionEnter.cs
new file mode 100644
index 0000000..91ef239
--- /dev/null
+++ b/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/DisableColliderOnCollisionEnter.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace MtC.Tools.QuadtreeCollider.Test
+{
+ ///
+ /// 当发生碰撞时禁用碰撞器的组件,用于测试延迟禁用碰撞器的功能
+ ///
+ [RequireComponent(typeof(CircleQuadtreeCollider))]
+ public class DisableColliderOnCollisionEnter : MonoBehaviour, IOnQuadtreeCollisionEnter
+ {
+ public void OnQuadtreeCollisionEnter(QuadtreeCollider collider)
+ {
+ GetComponent().enabled = false;
+
+ Debug.Log(gameObject.name + " 禁用碰撞器");
+ }
+ }
+}
diff --git a/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/New Scene.unity b/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/New Scene.unity
new file mode 100644
index 0000000..7a8a2b4
--- /dev/null
+++ b/Assets/Quadtree Collider Detection/Tests/03 Delay Disable/New Scene.unity
@@ -0,0 +1,942 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 3
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 1
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 0
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &175555487
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 175555488}
+ - component: {fileID: 175555490}
+ - component: {fileID: 175555489}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &175555488
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 175555487}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1453272153}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 1500, y: 1000}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &175555489
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 175555487}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 28
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 2
+ m_MaxSize: 40
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "\u8FD9\u4E2A\u573A\u666F\u7528\u4E8E\u6D4B\u8BD5\u5EF6\u8FDF\u7981\u7528\u78B0\u649E\u5668\u529F\u80FD\u3002\n\n\u8FD9\u4E2A\u529F\u80FD\u7684\u8BBE\u8BA1\u662F\u8FD9\u6837\uFF1A\u5728\u8C03\u7528\u79FB\u9664\u78B0\u649E\u5668\u7684\u65F6\u5019\uFF0C\u5728\u4E0B\u4E00\u6B21\u78B0\u649E\u68C0\u6D4B\u524D\u624D\u771F\u6B63\u79FB\u9664\u78B0\u649E\u5668\u3002\u8FD9\u6837\u4FDD\u8BC1\u5982\u679C\u5728\u78B0\u649E\u68C0\u6D4B\u9014\u4E2D\u78B0\u649E\u5668\u88AB\u79FB\u9664\u8FD9\u6B21\u78B0\u649E\u68C0\u6D4B\u4F9D\u7136\u53EF\u4EE5\u6B63\u5E38\u8FDB\u884C\uFF0C\u5E76\u4E0D\u4F1A\u5BFC\u81F4\u8FD9\u4E2A\u78B0\u649E\u5668\u68C0\u6D4B\u5230\u4E00\u534A\u6D88\u5931\u4E86\u3002\n\n\u90A3\u4E48\u6709\u4E24\u4E2A\u60C5\u51B5\uFF1A\n1.
+ \u4EC5\u4EC5\u662F\u79FB\u9664\u4E86\uFF0C\u5305\u62EC\u7981\u7528\u78B0\u649E\u673A\uFF0C\u6B64\u65F6\u78B0\u649E\u673A\u8FD8\u5728\uFF0C\u53EF\u4EE5\u6B63\u5E38\u8FDB\u884C\uFF0C\u53EA\u8981\u5EF6\u8FDF\u8C03\u7528\u5C31\u884C\u3002\n2.
+ \u78B0\u649E\u673A\u88AB\u9500\u6BC1\u4E86\uFF0C\u8FD9\u4E2A\u65F6\u5019\u4E0B\u6B21\u78B0\u649E\u68C0\u6D4B\u7684\u65F6\u5019\u78B0\u649E\u673A\u5DF2\u7ECF\u6CA1\u4E86\uFF0C\u6B64\u65F6\u9700\u8981\u53E6\u5916\u7684\u8FC7\u6EE4\u624B\u6BB5\u3002\n\n\u5206\u522B\u51C6\u5907\u6D4B\u8BD5\u65B9\u5F0F\uFF1A\n\u7981\u7528\u60C5\u51B5\uFF1A\u4E24\u4E2A\u7269\u4F53\u78B0\u649E\uFF0C\u78B0\u649E\u540E\u5404\u81EA\u7981\u7528\u81EA\u8EAB\u78B0\u649E\u5668\uFF0C\u5982\u679C\u4E24\u4E2A\u90FD\u7981\u7528\u4E86\uFF0C\u8BF4\u660E\u5EF6\u8FDF\u7981\u7528\u529F\u80FD\u6B63\u5E38\uFF0C\u5982\u679C\u53EA\u6709\u4E00\u4E2A\u7981\u7528\uFF0C\u8BF4\u660E\u5EF6\u8FDF\u7981\u7528\u529F\u80FD\u5931\u6548\u3002\n\u9500\u6BC1\u60C5\u51B5\uFF1A\u4E24\u4E2A\u7269\u4F53\u78B0\u649E\uFF0C\u78B0\u649E\u540E\u5404\u81EA\u9500\u6BC1\uFF0C\u5982\u679C\u4E24\u4E2A\u90FD\u9500\u6BC1\u4E86\uFF0C\u8BF4\u660E\u5EF6\u8FDF\u7981\u7528\u529F\u80FD\u6B63\u5E38\uFF0C\u5982\u679C\u53EA\u6709\u4E00\u4E2A\u9500\u6BC1\uFF0C\u8BF4\u660E\u5EF6\u8FDF\u7981\u7528\u529F\u80FD\u5931\u6548\u3002\n\u5BF9\u4E8E\u9500\u6BC1\u60C5\u51B5\u9700\u8981\u6CE8\u610F\u662F\u5426\u62A5\u5F02\u5E38\uFF0C\u9500\u6BC1\u60C5\u51B5\u662F\u4E0D\u7B26\u5408\u539F\u6765\u7684\u903B\u8F91\u7684\uFF0C\u9700\u8981\u5BF9\u5DF2\u9500\u6BC1\u7684\u78B0\u649E\u5668\u8FDB\u884C\u5904\u7406\u3002"
+--- !u!222 &175555490
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 175555487}
+ m_CullTransparentMesh: 1
+--- !u!1 &652189972
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 652189974}
+ - component: {fileID: 652189973}
+ - component: {fileID: 652189975}
+ - component: {fileID: 652189977}
+ - component: {fileID: 652189976}
+ m_Layer: 0
+ m_Name: Disable On Collision Object 02
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!212 &652189973
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 652189972}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 0.2, y: 0.2}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!4 &652189974
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 652189972}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -7.25, y: -2.23, z: 0}
+ m_LocalScale: {x: 3, y: 3, z: 3}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!50 &652189975
+Rigidbody2D:
+ serializedVersion: 4
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 652189972}
+ m_BodyType: 0
+ m_Simulated: 1
+ m_UseFullKinematicContacts: 0
+ m_UseAutoMass: 0
+ m_Mass: 1
+ m_LinearDrag: 0
+ m_AngularDrag: 0.05
+ m_GravityScale: 1
+ m_Material: {fileID: 0}
+ m_Interpolate: 0
+ m_SleepingMode: 1
+ m_CollisionDetection: 0
+ m_Constraints: 0
+--- !u!114 &652189976
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 652189972}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f171f5f4ee14161469d7205da05f740e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &652189977
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 652189972}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ autoSubscribe: 1
+ isDetector: 1
+ radius: 0.09
+--- !u!1 &684649189
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 684649192}
+ - component: {fileID: 684649191}
+ - component: {fileID: 684649190}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &684649190
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 684649189}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &684649191
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 684649189}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &684649192
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 684649189}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &778334678
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 778334681}
+ - component: {fileID: 778334680}
+ - component: {fileID: 778334679}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &778334679
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 778334678}
+ m_Enabled: 1
+--- !u!20 &778334680
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 778334678}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.8254717, g: 1, b: 0.83694285, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 1
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &778334681
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 778334678}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1453272149
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1453272153}
+ - component: {fileID: 1453272152}
+ - component: {fileID: 1453272151}
+ - component: {fileID: 1453272150}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1453272150
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1453272149}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1453272151
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1453272149}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0.5
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+--- !u!223 &1453272152
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1453272149}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &1453272153
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1453272149}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 175555488}
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &1606331807
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1606331811}
+ - component: {fileID: 1606331810}
+ - component: {fileID: 1606331809}
+ - component: {fileID: 1606331808}
+ m_Layer: 0
+ m_Name: Destroy On Collision Object 01
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1606331808
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1606331807}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5b8613a98603b8a4ca993eb80bd96400, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &1606331809
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1606331807}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ autoSubscribe: 1
+ isDetector: 1
+ radius: 0.09
+--- !u!212 &1606331810
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1606331807}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 0.2, y: 0.2}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!4 &1606331811
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1606331807}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 7.58, y: -3.49, z: 0}
+ m_LocalScale: {x: 3, y: 3, z: 3}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1868623146
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1868623148}
+ - component: {fileID: 1868623147}
+ - component: {fileID: 1868623150}
+ - component: {fileID: 1868623149}
+ m_Layer: 0
+ m_Name: Disable On Collision Object 01
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!212 &1868623147
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1868623146}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 0.2, y: 0.2}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!4 &1868623148
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1868623146}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -7.25, y: -3.49, z: 0}
+ m_LocalScale: {x: 3, y: 3, z: 3}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1868623149
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1868623146}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f171f5f4ee14161469d7205da05f740e, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &1868623150
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1868623146}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ autoSubscribe: 1
+ isDetector: 1
+ radius: 0.09
+--- !u!1 &1994605370
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1994605375}
+ - component: {fileID: 1994605374}
+ - component: {fileID: 1994605373}
+ - component: {fileID: 1994605372}
+ - component: {fileID: 1994605371}
+ m_Layer: 0
+ m_Name: Destroy On Collision Object 02
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!50 &1994605371
+Rigidbody2D:
+ serializedVersion: 4
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1994605370}
+ m_BodyType: 0
+ m_Simulated: 1
+ m_UseFullKinematicContacts: 0
+ m_UseAutoMass: 0
+ m_Mass: 1
+ m_LinearDrag: 0
+ m_AngularDrag: 0.05
+ m_GravityScale: 1
+ m_Material: {fileID: 0}
+ m_Interpolate: 0
+ m_SleepingMode: 1
+ m_CollisionDetection: 0
+ m_Constraints: 0
+--- !u!114 &1994605372
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1994605370}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5b8613a98603b8a4ca993eb80bd96400, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &1994605373
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1994605370}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 941f899d293b0e44393c418cec6cc3fe, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ autoSubscribe: 1
+ isDetector: 1
+ radius: 0.09
+--- !u!212 &1994605374
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1994605370}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 0.2, y: 0.2}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
+--- !u!4 &1994605375
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1994605370}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 7.58, y: -2.06, z: 0}
+ m_LocalScale: {x: 3, y: 3, z: 3}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 6
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git "a/Assets/Theoretical Calculation/\344\275\277\347\224\250\345\255\227\345\205\270\350\241\250\347\232\204\345\215\263\346\227\266\345\210\240\351\231\244\351\200\273\350\276\221.png" "b/Assets/Theoretical Calculation/\344\275\277\347\224\250\345\255\227\345\205\270\350\241\250\347\232\204\345\215\263\346\227\266\345\210\240\351\231\244\351\200\273\350\276\221.png"
deleted file mode 100644
index afc625f..0000000
--- "a/Assets/Theoretical Calculation/\344\275\277\347\224\250\345\255\227\345\205\270\350\241\250\347\232\204\345\215\263\346\227\266\345\210\240\351\231\244\351\200\273\350\276\221.png"
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9c49712a5e35f7e2b6397e07e4bce760b76d73c3b660ffc3f781e849a06756c8
-size 45972
diff --git "a/Assets/Theoretical Calculation/\345\210\227\350\241\250\345\222\214\344\272\214\345\217\211\345\240\206\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" "b/Assets/Theoretical Calculation/\345\210\227\350\241\250\345\222\214\344\272\214\345\217\211\345\240\206\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs"
deleted file mode 100644
index 4a5a8ec..0000000
--- "a/Assets/Theoretical Calculation/\345\210\227\350\241\250\345\222\214\344\272\214\345\217\211\345\240\206\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs"
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-
-列表和二叉堆的理论速度对比
-
-
-以单个末梢节点为基础进行对比
-
-假设节点中有 1000 个碰撞器,每次更新 10% 碰撞器移出,同时移入相同数量的碰撞器,同时有 2% 的碰撞器变大,2% 的碰撞器变小
-
-
-使用列表保存:
-只有找最大碰撞器成本,每一次更新遍历一次,时间成本 = 1000
-
-
-使用堆保存:
-一个是排序成本:需要更新所有节点 = 遍历成本 + 排序成本 = 1000 + 排序成本
-寻找最大碰撞器成本:必是第一个,成本 = 1
-
-
-堆保存因为必须遍历更新,反而导致效率下降。
-
- */
diff --git "a/Assets/Theoretical Calculation/\345\215\263\346\227\266\345\242\236\345\210\240\345\222\214\347\247\257\347\264\257\345\242\236\345\210\240\347\232\204\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs" "b/Assets/Theoretical Calculation/\345\215\263\346\227\266\345\242\236\345\210\240\345\222\214\347\247\257\347\264\257\345\242\236\345\210\240\347\232\204\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs"
deleted file mode 100644
index 1fad90c..0000000
--- "a/Assets/Theoretical Calculation/\345\215\263\346\227\266\345\242\236\345\210\240\345\222\214\347\247\257\347\264\257\345\242\236\345\210\240\347\232\204\347\220\206\350\256\272\351\200\237\345\272\246\345\257\271\346\257\224.cs"
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-
-假设有 5层,10000 个碰撞器,1000 个节点,每次更新有 10% 碰撞器移动到其他节点,每次更新有 5% 节点移除与新增,1% 的节点合并,同时 1% 的节点拆分
-
-不考虑缩放,缩放是节点内最大半径的更新相关,与增删速度无关
-
-重复存入怎么办?
-
-
-遍历节点 = 节点数 = 1000
-遍历全树 = 遍历节点 + 碰撞器数 = 1000 + 10000 = 11000
-
-直接移除节点 = 1
-剪枝移除节点 = 层数 + 末梢节点数 / 2 = 5 + 5 = 10
-全树移除节点 = 遍历全树 / 2 = 5500
-
-添加节点 = 层数 = 5
-
-分割节点 = 末梢节点数 = 10
-合并节点 = 末梢节点数 * 4 = 40
-
-
-累积到更新时处理
-
-不能即时返回操作结果,逻辑分步骤且简洁
-
-逻辑顺序:
-第一次遍历:遍历整个树、移除需要移除的节点、移除并记录越界的节点、合并需要合并的节点
-第一次遍历后:将越界的节点和新增的节点存入树,存入时根据需要进行分割
-
-第一次遍历:
- 遍历全树:11000
- 移除节点:直接移除节点 * 500 = 500
- 移除越界节点:直接移除节点 * 100 = 100
- 合并节点:合并节点 * 10 = 400
-第一次遍历后:
- 添加节点:添加节点 * 500 = 2500
- 添加越界节点:添加节点 * 100 = 500
- 分割节点:分割节点 * 10 * 100
-
-合并 = 11000 + 500 + 100 + 400 + 2500 + 500 + 100 = 15100
-
-
-即时处理
-
-即时返回操作结果,移除功能有缺陷
-
-逻辑顺序:
-存入:将节点存入树,根据需要进行分割
-移除:根据位置进行移除,如果根据位置移除失败,则全树移除,之后按照需要合并
-更新遍历:遍历整个树,移除并记录越界的节点,合并需要合并的节点
-更新遍历后:将越界的节点存入树,根据需要分割
-
-存入:
- 添加节点 * 500 = 2500
-移除:
- 剪枝移除:剪枝移除节点 * 500 = 5000
- 对越界节点进行全树移除:全树移除 * 500 * 5% = 5500 * 25 = 137500
-更新遍历:
- 遍历全树 = 11000
- 移除越界节点:直接移除节点 * 100 = 100
- 合并节点:合并节点 * 10 = 400
-更新遍历后:
- 添加越界节点:添加节点 * 100 = 500
- 分割节点:分割节点 * 10 * 100
-
-合并 = 2500 + 5000 + 137500 + 11000 + 100 + 400 + 500 + 100 = 157100
-
-
-带有字典索引的即时处理
-
-即时返回操作结果,逻辑纠缠复杂,因为存储了字典,可以更简单的解决重复存入问题
-
-逻辑顺序:
-存入:将节点存入树,根据需要进行分割
-移除:根据字典进行删除,之后按照需要合并
-更新遍历:遍历整个树,移除并记录越界的节点,合并需要合并的节点
-更新遍历后:将越界的节点存入树,根据需要分割
-
-存入:
- 添加节点 * 500 = 2500
-移除:
- 直接移除节点 * 500 = 500
-更新遍历:
- 遍历全树 = 11000
- 移除越界节点:直接移除节点 * 100 = 100
- 合并节点:合并节点 * 10 = 400
-更新遍历后:
- 添加越界节点:添加节点 * 100 = 500
- 分割节点:分割节点 * 10 * 100
-
-合并 = 2500 + 500 + 11000 + 100 + 400 + 500 + 100 = 15100
-
-
-考虑到维护字典,带字典的即时处理在内存和速度上都比更新时处理消耗大,但可以返回操作结果,Debug 也更方便
- */