From 86ec4522be1d0b932006801c7bf2297adc9f0028 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 30 Aug 2021 21:11:54 +0800 Subject: *misc --- Assets/Scripts/Managers/ResourceManager.cs | 28 ++++++++---- Assets/Scripts/Projectile/Projectile.cs | 17 +++---- Assets/Scripts/Unit/Collider/ColliderRegistry.cs | 17 ++++++- Assets/Scripts/Unit/Collider/CollisionSystem.cs | 15 +++++-- Assets/Scripts/Unit/Component/MonsterAnimation.cs | 10 +++++ Assets/Scripts/Unit/Component/MonsterState.cs | 52 ++++++++++++++++++++++ Assets/Scripts/Unit/Component/UnitCollider.cs | 10 ++--- .../Scripts/Unit/Controller/MonsterController.cs | 8 +--- Assets/Scripts/Unit/Events/EventProjectile.cs | 3 ++ Assets/Scripts/Unit/TimelineEventProxy.cs | 7 +-- 10 files changed, 125 insertions(+), 42 deletions(-) (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/Managers/ResourceManager.cs b/Assets/Scripts/Managers/ResourceManager.cs index 858ad345..c0a4275d 100644 --- a/Assets/Scripts/Managers/ResourceManager.cs +++ b/Assets/Scripts/Managers/ResourceManager.cs @@ -1,18 +1,28 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif -public class ResourceManager : MonoBehaviour +public class ResourceManager : Singleton { - // Start is called before the first frame update - void Start() - { - - } + Dictionary m_CachedObject = new Dictionary(); + - // Update is called once per frame - void Update() + public T LoadAsset(string path) where T : UnityEngine.Object { - + if(m_CachedObject.ContainsKey(path)) + { + return m_CachedObject[path] as T; + } + +#if UNITY_EDITOR + T obj = AssetDatabase.LoadAssetAtPath(path); + m_CachedObject.Add(path, obj); +#else +#endif + return obj; } + } diff --git a/Assets/Scripts/Projectile/Projectile.cs b/Assets/Scripts/Projectile/Projectile.cs index 867ffab1..70f2733c 100644 --- a/Assets/Scripts/Projectile/Projectile.cs +++ b/Assets/Scripts/Projectile/Projectile.cs @@ -4,15 +4,10 @@ using UnityEngine; public class Projectile : MonoBehaviour { - // Start is called before the first frame update - void Start() - { - - } - // Update is called once per frame - void Update() - { - - } -} + + public UnitController owner; + + public bool isActive; + +} \ No newline at end of file diff --git a/Assets/Scripts/Unit/Collider/ColliderRegistry.cs b/Assets/Scripts/Unit/Collider/ColliderRegistry.cs index d51e9615..408ce5a4 100644 --- a/Assets/Scripts/Unit/Collider/ColliderRegistry.cs +++ b/Assets/Scripts/Unit/Collider/ColliderRegistry.cs @@ -5,6 +5,7 @@ using UnityEngine; public class ColliderRegistry : Singleton { public List colliders = new List(); + public List projectiles = new List(); public void AddCollider(UnitCollider collider) { @@ -16,5 +17,19 @@ public class ColliderRegistry : Singleton { if (colliders.Contains(collider)) colliders.Remove(collider); - } + } + + + public void AddProjectile(Projectile projectile) + { + if (!projectiles.Contains(projectile)) + projectiles.Add(projectile); + } + + public void RemoveProjectile(Projectile projectile) + { + if (projectiles.Contains(projectile)) + projectiles.Remove(projectile); + } + } \ No newline at end of file diff --git a/Assets/Scripts/Unit/Collider/CollisionSystem.cs b/Assets/Scripts/Unit/Collider/CollisionSystem.cs index d5c96d0c..0e3c92f0 100644 --- a/Assets/Scripts/Unit/Collider/CollisionSystem.cs +++ b/Assets/Scripts/Unit/Collider/CollisionSystem.cs @@ -42,6 +42,7 @@ public class CollisionSystem : SingletonMB m_UnitColliderCount = registry.colliders != null ? registry.colliders.Count : 0; SolveHit(); + SolveProjectile(); } // hitbox <-> hurtbox @@ -102,10 +103,16 @@ public class CollisionSystem : SingletonMB ListPool.Release(hitboxes); ListPool.Release(hurtboxes); - } - - // throwbox <-> hurtbox - void SolveThrow() + } + + void SolveProjectile() + { + + } + + + // throwbox <-> hurtbox + void SolveThrow() { } diff --git a/Assets/Scripts/Unit/Component/MonsterAnimation.cs b/Assets/Scripts/Unit/Component/MonsterAnimation.cs index a59443e0..4db4b07f 100644 --- a/Assets/Scripts/Unit/Component/MonsterAnimation.cs +++ b/Assets/Scripts/Unit/Component/MonsterAnimation.cs @@ -96,5 +96,15 @@ public class MonsterAnimation : UnitAnimation m_Animator.Play("HitLight", 0, 0); //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } + public void AnimHitAir() + { + m_Animator.Play("HitAir", 0, 0); + //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); + } + + public void AnimRise() + { + m_Animator.CrossFade("Rise", 0); + } } diff --git a/Assets/Scripts/Unit/Component/MonsterState.cs b/Assets/Scripts/Unit/Component/MonsterState.cs index b1ff9cbd..cd2ed8e5 100644 --- a/Assets/Scripts/Unit/Component/MonsterState.cs +++ b/Assets/Scripts/Unit/Component/MonsterState.cs @@ -76,6 +76,10 @@ public class MonsterState : UnitState public struct HitLightParam { } + public struct HitAirParam { } + + public struct RiseParam { } + #region Idle IEnumerator Idle(IdleParam param) @@ -121,6 +125,54 @@ public class MonsterState : UnitState { } + #endregion + + #region HitAir + + IEnumerator HitAir(HitAirParam param) + { + m_Owner.monsterAnimation.AnimHitAir(); + yield return null; + while (true) + { + bool reachEnd = m_Owner.monsterAnimation.layers[0].playbackNomralizedTime == 1; + if (reachEnd) + { + //yield return new WaitForSeconds(1f); + ChangeState(EUnitState.Rise, new RiseParam()); + } + yield return null; + } + } + + void OnHitAirExit(EUnitState nextState) + { + } + + #endregion + + #region Rise + + IEnumerator Rise(RiseParam param) + { + m_Owner.monsterAnimation.AnimRise(); + yield return null; + while (true) + { + bool reachEnd = m_Owner.monsterAnimation.layers[0].playbackNomralizedTime == 1; + if (reachEnd) + { + ChangeState(EUnitState.Idle, new IdleParam()); + } + yield return null; + } + } + + void OnRiseExit(EUnitState nextState) + { + } + + #endregion diff --git a/Assets/Scripts/Unit/Component/UnitCollider.cs b/Assets/Scripts/Unit/Component/UnitCollider.cs index f3170d1b..ac9698a8 100644 --- a/Assets/Scripts/Unit/Component/UnitCollider.cs +++ b/Assets/Scripts/Unit/Component/UnitCollider.cs @@ -8,7 +8,7 @@ public class UnitCollider : UnitComponent { public bool showGizmos; - private Dictionary> hitMask = new Dictionary>(); + private Dictionary> m_HitMask = new Dictionary>(); public override void Awake() { @@ -49,16 +49,16 @@ public class UnitCollider : UnitComponent // 动作切换,重置collider mask public void OnAnimationChange() { - hitMask.Clear(); + m_HitMask.Clear(); } public void RecordCollision(int colliderHash, int targetHash) { List record; - if (!hitMask.TryGetValue(colliderHash, out record)) + if (!m_HitMask.TryGetValue(colliderHash, out record)) { record = new List(); - hitMask.Add(colliderHash, record); + m_HitMask.Add(colliderHash, record); } record.Add(targetHash); } @@ -66,7 +66,7 @@ public class UnitCollider : UnitComponent public bool CanCollide(int colliderHash, int targetHash) { List record; - if(!hitMask.TryGetValue(colliderHash, out record)) + if(!m_HitMask.TryGetValue(colliderHash, out record)) { return true; } diff --git a/Assets/Scripts/Unit/Controller/MonsterController.cs b/Assets/Scripts/Unit/Controller/MonsterController.cs index 29ac9dcd..5dca47d8 100644 --- a/Assets/Scripts/Unit/Controller/MonsterController.cs +++ b/Assets/Scripts/Unit/Controller/MonsterController.cs @@ -1,9 +1,6 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -#if UNITY_EDITOR -using UnityEditor; -#endif public class MonsterController : UnitController { @@ -48,17 +45,16 @@ public class MonsterController : UnitController } else if(hitbox.hitResponse == ColliderBox.EHitResponse.HitAir) { + monsterState.ChangeState(MonsterState.EUnitState.HitAir, new MonsterState.HitAirParam()); } string path = hitbox.sparkPath; -#if UNITY_EDITOR - GameObject vfx = AssetDatabase.LoadAssetAtPath(path); + GameObject vfx = ResourceManager.Instance.LoadAsset(path); if(vfx != null) { GameObject go = GameObject.Instantiate(vfx); go.transform.position = center; } -#endif } } \ No newline at end of file diff --git a/Assets/Scripts/Unit/Events/EventProjectile.cs b/Assets/Scripts/Unit/Events/EventProjectile.cs index 0a85cce9..731c42a9 100644 --- a/Assets/Scripts/Unit/Events/EventProjectile.cs +++ b/Assets/Scripts/Unit/Events/EventProjectile.cs @@ -29,4 +29,7 @@ public class EventProjectile : AnimationEventBase [Tooltip("Initial velocity")] public Vector3 velocity; + [Tooltip("击中效果")] + public ColliderBox.EHitResponse hitResponse; + } diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs index cb30e900..bb598666 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy.cs @@ -3,9 +3,6 @@ using System.Collections; using System.Reflection; using System.Collections.Generic; using UnityEngine; -#if UNITY_EDITOR -using UnityEditor; -#endif // 执行帧事件 [DisallowMultipleComponent] @@ -105,8 +102,7 @@ public partial class TimelineEventProxy if (effect == null) return; string path = effect.effectPath; -#if UNITY_EDITOR - GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject; + GameObject prefab = ResourceManager.Instance.LoadAsset(path); if (prefab != null) { GameObject root = new GameObject(); @@ -117,7 +113,6 @@ public partial class TimelineEventProxy onClear.RunInEditor = true; onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, m_Root, effect.position, effect.rotation, effect.scale, 0, false)); } -#endif } void EventCamera_Shake(AnimationEventBase animEvent) -- cgit v1.1-26-g67d0