diff options
author | chai <215380520@qq.com> | 2023-05-08 18:40:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-05-08 18:40:58 +0800 |
commit | d2a574ba76c56c340d8ac0ad841344664bc2cc59 (patch) | |
tree | 7979942ab64be60dfd45bc0508fd47d2411866ff /marching/Assets/Scripts/Unit | |
parent | 2758cf7c8be717a733f25eb39df20e307382f089 (diff) |
+ misc
Diffstat (limited to 'marching/Assets/Scripts/Unit')
-rw-r--r-- | marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs | 1 | ||||
-rw-r--r-- | marching/Assets/Scripts/Unit/Enemies/SpiritScript.cs | 53 |
2 files changed, 49 insertions, 5 deletions
diff --git a/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs index a93c293..ce321d3 100644 --- a/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs +++ b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs @@ -1,7 +1,6 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using static UnityEditor.PlayerSettings; namespace MH { diff --git a/marching/Assets/Scripts/Unit/Enemies/SpiritScript.cs b/marching/Assets/Scripts/Unit/Enemies/SpiritScript.cs index 3df5e4b..d33b494 100644 --- a/marching/Assets/Scripts/Unit/Enemies/SpiritScript.cs +++ b/marching/Assets/Scripts/Unit/Enemies/SpiritScript.cs @@ -11,36 +11,81 @@ public class SpiritScript : UnitBase public Item_Coin coinPrefab; public int count = 0; + public float avg = 0; private FastCircleCollider collider; private static List<IQuadTreeObject> collisions = new List<IQuadTreeObject>(); + private SpriteRenderer m_SpriteRenderer; + + private int m_CollisionCheckerCount = 0; + + private static int sCount = 0; + private static float sAvg = 0; + protected override void Awake() { base.Awake(); collider = GetComponent<FastCircleCollider>(); + m_SpriteRenderer = GetComponent<SpriteRenderer>(); } protected override void Update() { base.Update(); + } + + private void FixedUpdate() + { UnitBase hero = UnitManager.hero; Vector2 pos = transform.position; Vector2 heroPos = hero.transform.position; Vector2 dir = (heroPos - pos).normalized; - pos += dir * Time.deltaTime * speed; - this.GetComponent<SpriteRenderer>().flipX = dir.x < 0; + Vector2 dist = dir * Time.deltaTime * speed; // 位移 + m_SpriteRenderer.flipX = dir.x < 0; collisions.Clear(); - if (TestQuadtree.quadtree.Retrieve(ref collisions, collider)) + + bool bCollide = false; + if (m_CollisionCheckerCount == 0 && TestQuadtree.quadtree.Retrieve(ref collisions, collider)) { count = collisions.Count; + sAvg = (sCount * sAvg + count) / (float)(sCount + 1); + avg = sAvg; + sCount++; + bool movable = true; + Vector2 seperate = new Vector2(); + for (int i = 0; i < collisions.Count; ++i) + { + FastCircleCollider col = collisions[i] as FastCircleCollider; + if (col == collider) + continue; + if (PhysicsManager.CircleVsCircle(col.center, col.radius, collider.center, collider.radius)) + { + bCollide = true; + movable = false; + Vector2 distance = collider.center - col.center; + seperate = distance.normalized * (col.radius + collider.radius - distance.magnitude); // + dist += seperate; + dist -= (distance.normalized * dist) * distance.normalized; // 去除这个方向的位移 + } + } + if (!movable) + { + } + } + if (bCollide) + { + m_CollisionCheckerCount = 0; } else { - transform.position = pos; + m_CollisionCheckerCount++; + m_CollisionCheckerCount %= 10; } + dist = dist.normalized * Time.deltaTime * speed; // 保持原速 + transform.position += dist.ToVector3(); } public void Die() |