summaryrefslogtreecommitdiff
path: root/WorldlineKeepers/Assets/Scripts/Physics
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-05-26 19:12:36 +0800
committerchai <215380520@qq.com>2023-05-26 19:12:36 +0800
commit38e177b0fdf130d6a361ab51c80b5b56ee83f28e (patch)
tree004cbaedc5a7be0b84bc4e05335800775f74e642 /WorldlineKeepers/Assets/Scripts/Physics
parent5bb5da4caebfdc8627e331b4eb5c53457316ec44 (diff)
*misc
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Physics')
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs8
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs8
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs4
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager_StaticTree.cs38
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/PhysicsQuadtree.cs3
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/TestSpirits.cs1
6 files changed, 60 insertions, 2 deletions
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs b/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs
index df84e0d..a644b69 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs
@@ -60,6 +60,10 @@ public class FastBoxCollider : MonoBehaviour, IQuadTreeObject
{
PhysicsManager.Instance.AddHurtboxes(this);
}
+ else if (m_Type == ColliderType.StaticCollider)
+ {
+ PhysicsManager.Instance.AddStaticCollider(this);
+ }
}
public void OnDestroy()
@@ -72,6 +76,10 @@ public class FastBoxCollider : MonoBehaviour, IQuadTreeObject
{
PhysicsManager.Instance.RemoveHurtbox(this);
}
+ else if (m_Type == ColliderType.StaticCollider)
+ {
+ PhysicsManager.Instance.RemoveStaticCollider(this);
+ }
}
private void OnDrawGizmos()
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs b/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs
index dde49f9..5f04a9f 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs
@@ -60,6 +60,10 @@ public class FastCircleCollider : MonoBehaviour, IQuadTreeObject
{
PhysicsManager.Instance.AddHurtboxes(this);
}
+ else if(m_Type == ColliderType.StaticCollider)
+ {
+ PhysicsManager.Instance.AddStaticCollider(this);
+ }
}
public void OnDestroy()
@@ -72,6 +76,10 @@ public class FastCircleCollider : MonoBehaviour, IQuadTreeObject
{
PhysicsManager.Instance.RemoveHurtbox(this);
}
+ else if(m_Type == ColliderType.StaticCollider)
+ {
+ PhysicsManager.Instance.RemoveStaticCollider(this);
+ }
}
private void OnDrawGizmos()
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs
index b726d6b..182ea16 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager.cs
@@ -8,11 +8,11 @@ public enum ColliderType
{
Collider,
Hurtbox,
+ StaticCollider,
}
public partial class PhysicsManager : Singleton<PhysicsManager>
{
- // 四叉树筛选结果
public List<IQuadTreeObject> sharedRetriveResults => m_SharedRetriveResults;
private List<IQuadTreeObject> m_SharedRetriveResults = new List<IQuadTreeObject>();
@@ -28,6 +28,8 @@ public partial class PhysicsManager : Singleton<PhysicsManager>
return RetriveColliders;
else if (type == ColliderType.Hurtbox)
return RetriveHurtboxes;
+ else if (type == ColliderType.StaticCollider)
+ return RetriveStaticColliders;
else
return null;
}
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager_StaticTree.cs b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager_StaticTree.cs
index c759e32..b89da29 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager_StaticTree.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsManager_StaticTree.cs
@@ -1,10 +1,48 @@
+using mh;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+/// <summary>
+/// 不经常改变位置和大小的collider认为是静态collider,不会每帧重建
+/// </summary>
public partial class PhysicsManager : Singleton<PhysicsManager>
{
+ private PhysicsQuadtree m_StaticCollisionQuadtree;
+ public Vector4 staticCollisionQuadtreeRange
+ {
+ set
+ {
+ m_StaticCollisionQuadtree.quadtreeRange = value;
+ }
+ }
+
+ public void AddStaticCollider(IQuadTreeObject collider)
+ {
+ m_StaticCollisionQuadtree.AddObject(collider);
+ }
+
+ public void RemoveStaticCollider(IQuadTreeObject collider)
+ {
+ m_StaticCollisionQuadtree.RemoveObject(collider);
+ }
+
+ public bool RetriveStaticColliders(ref List<IQuadTreeObject> returnObjs, IQuadTreeObject obj)
+ {
+ return m_StaticCollisionQuadtree.Retrive(ref returnObjs, obj);
+ }
+
+ public bool RetriveStaticColliders(ref List<IQuadTreeObject> returnObjs, Vector4 bound)
+ {
+ return m_StaticCollisionQuadtree.Retrive(ref returnObjs, bound);
+ }
+
+ public bool RetriveStaticColliders(Vector4 bound)
+ {
+ m_SharedRetriveResults.Clear();
+ return m_StaticCollisionQuadtree.Retrive(ref m_SharedRetriveResults, bound);
+ }
}
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsQuadtree.cs b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsQuadtree.cs
index 5cd374e..9fa8c2f 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/PhysicsQuadtree.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/PhysicsQuadtree.cs
@@ -40,6 +40,9 @@ class PhysicsQuadtree
m_Objects.Remove(obj);
}
+ /// <summary>
+ /// 閲嶅缓鍥涘弶鏍
+ /// </summary>
public void UpdateQuadtree()
{
m_Quadtree.Clear(false);
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/TestSpirits.cs b/WorldlineKeepers/Assets/Scripts/Physics/TestSpirits.cs
index 3f313ae..8e46d3d 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/TestSpirits.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/TestSpirits.cs
@@ -12,7 +12,6 @@ public class TestSpirits : MonoBehaviour
private const int kMaxCount = 500;
- // Start is called before the first frame update
void Start()
{
int count = kMaxCount - spirits.Count;