diff options
author | chai <215380520@qq.com> | 2023-05-26 19:12:36 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-05-26 19:12:36 +0800 |
commit | 38e177b0fdf130d6a361ab51c80b5b56ee83f28e (patch) | |
tree | 004cbaedc5a7be0b84bc4e05335800775f74e642 /WorldlineKeepers/Assets/Scripts/Physics | |
parent | 5bb5da4caebfdc8627e331b4eb5c53457316ec44 (diff) |
*misc
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Physics')
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; |