diff options
Diffstat (limited to 'marching/Assets/Scripts')
16 files changed, 197 insertions, 91 deletions
diff --git a/marching/Assets/Scripts/Managers/CameraManager.cs b/marching/Assets/Scripts/Managers/CameraManager.cs new file mode 100644 index 0000000..b063bb2 --- /dev/null +++ b/marching/Assets/Scripts/Managers/CameraManager.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CameraManager : Singleton<CameraManager> +{ + + + +} diff --git a/marching/Assets/Scripts/Managers/CameraManager.cs.meta b/marching/Assets/Scripts/Managers/CameraManager.cs.meta new file mode 100644 index 0000000..13e9a10 --- /dev/null +++ b/marching/Assets/Scripts/Managers/CameraManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99d25fcd0b568564c8f5530b957bdcb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Physics/PhysicsManager.cs b/marching/Assets/Scripts/Physics/PhysicsManager.cs index bbba030..164d62b 100644 --- a/marching/Assets/Scripts/Physics/PhysicsManager.cs +++ b/marching/Assets/Scripts/Physics/PhysicsManager.cs @@ -13,87 +13,14 @@ public enum ColliderType public partial class PhysicsManager : Singleton<PhysicsManager> { - #region Quadtrees - private PhysicsQuadtree m_CollisionQuadtree; - private PhysicsQuadtree m_HurtboxQuadtree; - #endregion - - public Vector4 collisionQuadtreeRange - { - set - { - m_CollisionQuadtree.quadtreeRange = value; - } - } - - public Vector4 hurtboxQuadtreeRange - { - set - { - m_HurtboxQuadtree.quadtreeRange = value; - } - } public List<IQuadTreeObject> sharedRetriveResults => m_SharedRetriveResults; private List<IQuadTreeObject> m_SharedRetriveResults = new List<IQuadTreeObject>(); - public PhysicsManager() + public PhysicsManager() { m_CollisionQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); m_HurtboxQuadtree = new PhysicsQuadtree(new Vector4(0, 0, 30, 30)); - } - - public void AddCollider(IQuadTreeObject collider) - { - m_CollisionQuadtree.AddObject(collider); - } - - public void RemoveCollider(IQuadTreeObject collider) - { - m_CollisionQuadtree.RemoveObject(collider); - } - - public void AddHurtboxes(IQuadTreeObject hurtbox) - { - m_HurtboxQuadtree.AddObject(hurtbox); - } - - public void RemoveHurtbox(IQuadTreeObject hurtbox) - { - m_HurtboxQuadtree.RemoveObject(hurtbox); - } - - public void Update() - { - m_CollisionQuadtree.UpdateQuadtree(); - m_HurtboxQuadtree.UpdateQuadtree(); - } - - public bool RetriveColliders(ref List<IQuadTreeObject> returnObjs, IQuadTreeObject obj) - { - return m_CollisionQuadtree.Retrive(ref returnObjs, obj); - } - - public bool RetriveColliders(ref List<IQuadTreeObject> returnObjs, Vector4 bound) - { - return m_CollisionQuadtree.Retrive(ref returnObjs, bound); - } - - public bool RetriveHurtboxes(ref List<IQuadTreeObject> returnObjs, Vector4 bound) - { - return m_HurtboxQuadtree.Retrive(ref returnObjs, bound); - } - - public bool RetriveColliders(Vector4 bound) - { - m_SharedRetriveResults.Clear(); - return m_CollisionQuadtree.Retrive(ref m_SharedRetriveResults, bound); - } - - public bool RetriveHurtboxes(Vector4 bound) - { - m_SharedRetriveResults.Clear(); - return m_HurtboxQuadtree.Retrive(ref m_SharedRetriveResults, bound); } public System.Func<Vector4, bool> GetRetriverByType(ColliderType type) @@ -106,6 +33,12 @@ public partial class PhysicsManager : Singleton<PhysicsManager> return null; } + public void Update() + { + m_CollisionQuadtree.UpdateQuadtree(); + m_HurtboxQuadtree.UpdateQuadtree(); + } + public void Debug() { m_CollisionQuadtree.Debug(); diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs index 3436a34..a0dcc97 100644 --- a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs +++ b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs @@ -48,8 +48,14 @@ public partial class PhysicsManager : Singleton<PhysicsManager> public static bool BoxVsBox(Vector4 b1, Vector4 b2) { - Vector2 intersection = new Vector2(); - return BoxVsBox(b1, b2, out intersection); + float b1w = b1.z / 2f, b1h = b1.w / 2f, b2w = b2.z / 2f, b2h = b2.w / 2f; + float distX = b2.x - b1.x; + float distY = b2.y - b1.y; + if (Mathf.Abs(distX) < b1w + b2w && Mathf.Abs(distY) < b1h + b2h) + { + return true; + } + return false; } public static bool BoxVsCircle(Vector4 box, Vector2 pos, float radius) diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionTree.cs b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionTree.cs new file mode 100644 index 0000000..f372f3a --- /dev/null +++ b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionTree.cs @@ -0,0 +1,45 @@ +using mh; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public partial class PhysicsManager : Singleton<PhysicsManager> +{ + + private PhysicsQuadtree m_CollisionQuadtree; + + public Vector4 collisionQuadtreeRange + { + set + { + m_CollisionQuadtree.quadtreeRange = value; + } + } + + public void AddCollider(IQuadTreeObject collider) + { + m_CollisionQuadtree.AddObject(collider); + } + + public void RemoveCollider(IQuadTreeObject collider) + { + m_CollisionQuadtree.RemoveObject(collider); + } + + public bool RetriveColliders(ref List<IQuadTreeObject> returnObjs, IQuadTreeObject obj) + { + return m_CollisionQuadtree.Retrive(ref returnObjs, obj); + } + + public bool RetriveColliders(ref List<IQuadTreeObject> returnObjs, Vector4 bound) + { + return m_CollisionQuadtree.Retrive(ref returnObjs, bound); + } + + public bool RetriveColliders(Vector4 bound) + { + m_SharedRetriveResults.Clear(); + return m_CollisionQuadtree.Retrive(ref m_SharedRetriveResults, bound); + } + +}
\ No newline at end of file diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionTree.cs.meta b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionTree.cs.meta new file mode 100644 index 0000000..1ac4a70 --- /dev/null +++ b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb174e1114e8e3d439bdb43fa7d609b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_HurtboxTree.cs b/marching/Assets/Scripts/Physics/PhysicsManager_HurtboxTree.cs new file mode 100644 index 0000000..ca13935 --- /dev/null +++ b/marching/Assets/Scripts/Physics/PhysicsManager_HurtboxTree.cs @@ -0,0 +1,40 @@ +using mh; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public partial class PhysicsManager : Singleton<PhysicsManager> +{ + + private PhysicsQuadtree m_HurtboxQuadtree; + + public Vector4 hurtboxQuadtreeRange + { + set + { + m_HurtboxQuadtree.quadtreeRange = value; + } + } + + public void AddHurtboxes(IQuadTreeObject hurtbox) + { + m_HurtboxQuadtree.AddObject(hurtbox); + } + + public void RemoveHurtbox(IQuadTreeObject hurtbox) + { + m_HurtboxQuadtree.RemoveObject(hurtbox); + } + + public bool RetriveHurtboxes(ref List<IQuadTreeObject> returnObjs, Vector4 bound) + { + return m_HurtboxQuadtree.Retrive(ref returnObjs, bound); + } + + public bool RetriveHurtboxes(Vector4 bound) + { + m_SharedRetriveResults.Clear(); + return m_HurtboxQuadtree.Retrive(ref m_SharedRetriveResults, bound); + } + +} diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_HurtboxTree.cs.meta b/marching/Assets/Scripts/Physics/PhysicsManager_HurtboxTree.cs.meta new file mode 100644 index 0000000..39cd699 --- /dev/null +++ b/marching/Assets/Scripts/Physics/PhysicsManager_HurtboxTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fc247f3e6aafbd45a935ef4b1ced70c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs b/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs index cb17900..f4bad27 100644 --- a/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs +++ b/marching/Assets/Scripts/Physics/PhysicsQuadtree.cs @@ -16,7 +16,7 @@ class PhysicsQuadtree public PhysicsQuadtree(Vector4 range) { m_QuadtreeRange = range; - m_Quadtree = new Quadtree(0, range); + m_Quadtree = new Quadtree(0, range, true); } public void AddObject(IQuadTreeObject obj) @@ -33,17 +33,22 @@ class PhysicsQuadtree { m_Quadtree.Clear(false); m_Quadtree.Rebound(m_QuadtreeRange); + Vector4 bound = m_Quadtree.bound; for (int i = 0; i < m_Objects.Count; i++) { IQuadTreeObject obj = m_Objects[i]; - m_Quadtree.Insert(obj); + // 简单的忽略中心在边界外的object + if(PhysicsManager.IsPointInsideBox(bound, obj.bound.xy())) + { + m_Quadtree.Insert(obj); + } } } public void Debug() { Color c = Gizmos.color; - Gizmos.color = Color.red; + Gizmos.color = Color.green; m_Quadtree?.Iterate((t) => { Vector3 pos = new Vector3(t.x, t.y, 0); @@ -63,5 +68,4 @@ class PhysicsQuadtree return m_Quadtree.Retrieve(ref returnObjs, bound); } -} - +}
\ No newline at end of file diff --git a/marching/Assets/Scripts/Physics/Quadtree.cs b/marching/Assets/Scripts/Physics/Quadtree.cs index f1237ab..9f8ecba 100644 --- a/marching/Assets/Scripts/Physics/Quadtree.cs +++ b/marching/Assets/Scripts/Physics/Quadtree.cs @@ -23,14 +23,16 @@ namespace mh /// </summary> public class Quadtree { - public const int kMaxObjectsPerBlock = 5; - public const int kMaxLevel = 6; + public const int kMaxObjectsPerBlock = 4; + public const int kMaxLevel = 5; private int m_Level; private Vector4 m_Bounds; // x,y,z,w => posx,posy,width,height private Quadtree[] m_SubTrees; // Ͻǿʼʱ private List<IQuadTreeObject> m_Objects; // ǰɣκһɵĶ + private bool m_IsRoot; + public Vector4 bound { get { return m_Bounds; } } public float x { get { return m_Bounds.x; } } public float y { get { return m_Bounds.y; } } public float w { get { return m_Bounds.z; } } @@ -42,6 +44,8 @@ namespace mh public float top { get { return y + halfH; } } public float bottom { get { return y - halfH; } } + public bool isRoot { get { return m_IsRoot; } } + private static Queue<List<IQuadTreeObject>> m_QuadtreeObjPool = new Queue<List<IQuadTreeObject>>(); private static Queue<Quadtree> m_QuadtreePool = new Queue<Quadtree>(); @@ -84,12 +88,13 @@ namespace mh list = null; } - public Quadtree(int level, Vector4 bounds) + public Quadtree(int level, Vector4 bounds, bool isRoot = false) { m_Level = level; m_Bounds = bounds; m_SubTrees = new Quadtree[4]; m_Objects = QueryQuadtreeObjList(); + m_IsRoot = isRoot; } public void Rebound(Vector4 bounds) diff --git a/marching/Assets/Scripts/Physics/TestQuadtree.cs b/marching/Assets/Scripts/Physics/TestQuadtree.cs index 54ff5f6..2ea967e 100644 --- a/marching/Assets/Scripts/Physics/TestQuadtree.cs +++ b/marching/Assets/Scripts/Physics/TestQuadtree.cs @@ -18,8 +18,8 @@ namespace mh private void FixedUpdate() { var pos = UnitManager.hero.transform.position; - PhysicsManager.Instance.collisionQuadtreeRange = new Vector4(pos.x, pos.y, 50, 50); - PhysicsManager.Instance.hurtboxQuadtreeRange = new Vector4(pos.x, pos.y, 50, 50); + PhysicsManager.Instance.collisionQuadtreeRange = new Vector4(pos.x, pos.y, 30, 20); + PhysicsManager.Instance.hurtboxQuadtreeRange = new Vector4(pos.x, pos.y, 30, 20); PhysicsManager.Instance.Update(); } diff --git a/marching/Assets/Scripts/Physics/TestSpirits.cs b/marching/Assets/Scripts/Physics/TestSpirits.cs index 058f166..3f313ae 100644 --- a/marching/Assets/Scripts/Physics/TestSpirits.cs +++ b/marching/Assets/Scripts/Physics/TestSpirits.cs @@ -10,10 +10,12 @@ public class TestSpirits : MonoBehaviour public static List<SpiritScript> spirits = new List<SpiritScript>(); + private const int kMaxCount = 500; + // Start is called before the first frame update void Start() { - int count = 300 - spirits.Count; + int count = kMaxCount - spirits.Count; for (int i = 0; i < count; ++i) { float x = UnityEngine.Random.Range(-20, 10); @@ -30,7 +32,7 @@ public class TestSpirits : MonoBehaviour { while (true) { - int count = 300 - spirits.Count; + int count = kMaxCount - spirits.Count; for (int i = 0; i < count; ++i) { float x = UnityEngine.Random.Range(-20, 10); diff --git a/marching/Assets/Scripts/Projectiles/BladeScript.cs b/marching/Assets/Scripts/Projectiles/BladeScript.cs index 929f574..5a37e4a 100644 --- a/marching/Assets/Scripts/Projectiles/BladeScript.cs +++ b/marching/Assets/Scripts/Projectiles/BladeScript.cs @@ -9,6 +9,8 @@ public class BladeScript : ProjectileBase { [NonSerialized] public float life; + public Vector2 dir; + private static List<IQuadTreeObject> collisions = new List<IQuadTreeObject>(); private FastCircleCollider collider; @@ -25,7 +27,7 @@ public class BladeScript : ProjectileBase { collider = GetComponent<FastCircleCollider>(); Invoke("DestroySelf", life); - Attack(); + // Attack(); } void DestroySelf() @@ -38,6 +40,10 @@ public class BladeScript : ProjectileBase Color c = sr.color; c.a *= 0.99f; sr.color = c; + + transform.localRotation *= Quaternion.Euler(0, 0, 20); + + transform.position += (dir * Time.deltaTime * 10f).ToVector3(); } public void SetFlip(bool flip) @@ -73,6 +79,7 @@ public class BladeScript : ProjectileBase public void FixedUpdate() { + Attack(); } } diff --git a/marching/Assets/Scripts/UI/Operators/AlienHunter.meta b/marching/Assets/Scripts/UI/Operators/AlienHunter.meta new file mode 100644 index 0000000..cdff466 --- /dev/null +++ b/marching/Assets/Scripts/UI/Operators/AlienHunter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 757a90f0c6e2c764396bff0250fb2277 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/UI/Operators/Finisher.meta b/marching/Assets/Scripts/UI/Operators/Finisher.meta new file mode 100644 index 0000000..cff88d8 --- /dev/null +++ b/marching/Assets/Scripts/UI/Operators/Finisher.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7957fa2127514fe4a8d02e5f20b91a6b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs index 2026034..966c3d0 100644 --- a/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs +++ b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs @@ -154,10 +154,14 @@ namespace MH } else { + Vector3 mousePos = Input.mousePosition; + Vector3 mousePos3D = m_Camera.ScreenToWorldPoint(mousePos); + Vector2 dir = (mousePos3D.xy() - transform.position.xy()).normalized; BladeScript blade = Instantiate(m_Blade); - blade.life = 0.5f; + blade.life = 5f; blade.transform.position = transform.position + new Vector3(1 * fac, 1f, 0); blade.SetFlip(fac == -1); + blade.dir = dir; fac *= -1; yield return new WaitForSeconds(interval); } @@ -175,8 +179,9 @@ namespace MH } else { - Strike(); yield return new WaitForSeconds(interval); + yield return new WaitForFixedUpdate(); + Strike(); } } } |