From 491fab84700fd96a5140000679a11ca93349c8d1 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 9 Sep 2021 14:58:31 +0800 Subject: *air combo --- Assets/Scripts/Test 1/TestErika.cs | 14 +++++++- Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs | 8 +++-- Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs | 15 ++++---- .../Components/UnitAnimation/MonsterAnimation.cs | 6 ++++ .../Unit/Components/UnitState/MonsterState.cs | 41 ++++++++++++++++++++-- .../Scripts/Unit/Controller/MonsterController.cs | 12 ++++++- Assets/Scripts/Unit/UnitRootMotion.cs | 4 ++- 7 files changed, 85 insertions(+), 15 deletions(-) (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/Test 1/TestErika.cs b/Assets/Scripts/Test 1/TestErika.cs index 81bdbdd3..949cf76f 100644 --- a/Assets/Scripts/Test 1/TestErika.cs +++ b/Assets/Scripts/Test 1/TestErika.cs @@ -34,6 +34,18 @@ public class TestErika : MonoBehaviour SetupMonster(); } + private void Update() + { + if (Input.GetKeyDown("r")) + { + erika.unitController.transform.position = Vector3.zero; + erika.unitController.transform.rotation = Quaternion.identity; + + monster.unitController.transform.position = new Vector3(2, 0, 0); + monster.unitController.transform.rotation = Quaternion.Euler(0, 180, 0); + } + } + void SetupErika() { erika.unitController = GameObject.Instantiate(erika.unitControllerPrefab); @@ -90,7 +102,7 @@ public class TestErika : MonoBehaviour unitCtr.monsterState.ChangeState(MonsterState.EUnitState.Idle, new MonsterState.IdleParam(), true); - monster.unitController.transform.position = new Vector3(5, 0, 0); + monster.unitController.transform.position = new Vector3(2, 0, 0); monster.unitController.transform.rotation *= Quaternion.Euler(0, 180, 0); } diff --git a/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs b/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs index 0ddc5ef8..ce34cb61 100644 --- a/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs +++ b/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs @@ -3,10 +3,12 @@ using System.Collections.Generic; using UnityEngine; public class AfterImageAvatar : MonoBehaviour -{ - #region 序列化内容 - +{ + #region inspector + + public Renderer[] renderers; + public Animator animator; #endregion diff --git a/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs b/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs index a1455c6a..b765265c 100644 --- a/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs +++ b/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs @@ -23,9 +23,9 @@ public partial class ColliderBox public enum ESparkAnchor : int { - CenterOfIntersection = 0, // hitbox和hurtbox相交的矩形中心 - CenterOfOther = 1, // 被攻击的对象的几何中心 - PositionOfOther = 2, // 被攻击对象的原点 + CenterOfIntersection = 0, // hitbox和hurtbox相交的矩形中心 + CenterOfOther = 1, // 被攻击的对象的几何中心 + PositionOfOther = 2, // 被攻击对象的原点 CenterOfHitbox = 3, // hitbox的中心 FrontOfHitbox = 4, // hitbox的前方 } @@ -43,7 +43,8 @@ public partial class ColliderBox Light = 0, Heavy = 1, HitAir = 2, - HitGround = 3 + HitGround = 3, + HitInAir = 4, } [ColliderType(EColliderType.HitBox)] @@ -75,7 +76,7 @@ public partial class ColliderBox [Tooltip("击中后的粒子效果")] public string sparkPath; [Tooltip("粒子的锚点")] - public ESparkAnchor sparkAnchor; + public ESparkAnchor sparkAnchor = ESparkAnchor.CenterOfOther; [Tooltip("击中后的粒子位置偏移")] public Vector3 sparkOffset; [Tooltip("击中后的粒子大小")] @@ -85,13 +86,13 @@ public partial class ColliderBox [If("multiSparks"), Tooltip("击中后的粒子效果")] public string spark2Path; [If("multiSparks"), Tooltip("粒子的锚点")] - public ESparkAnchor spark2Anchor; + public ESparkAnchor spark2Anchor = ESparkAnchor.CenterOfOther; [If("multiSparks"), Tooltip("击中后的粒子位置偏移")] public Vector3 spark2Offset; [If("multiSparks"), Tooltip("击中后的粒子效果")] public string spark3Path; [If("multiSparks"), Tooltip("粒子的锚点")] - public ESparkAnchor spark3Anchor; + public ESparkAnchor spark3Anchor = ESparkAnchor.CenterOfOther; [If("multiSparks"), Tooltip("击中后的粒子位置偏移")] public Vector3 spark3Offset; diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs index 91583d34..ee111f73 100644 --- a/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs +++ b/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs @@ -21,6 +21,7 @@ public class MonsterAnimation : UnitAnimation HitLight, HitAir, + HitInAir, HitBackHeavy, Rise, @@ -93,6 +94,11 @@ public class MonsterAnimation : UnitAnimation //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0); } + public void AnimHitInAir() + { + this.Play(EAnimState.HitInAir, 0, 0); + } + public void AnimHitBackHeavy() { this.Play(EAnimState.HitBackHeavy, 0, 0); diff --git a/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs b/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs index db68493b..c2a581b1 100644 --- a/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs +++ b/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs @@ -16,6 +16,7 @@ public class MonsterState : UnitState HitLight, HitAir, + HitInAir, HitGround, HitFall, KnockDown, @@ -80,6 +81,8 @@ public class MonsterState : UnitState public struct RiseParam { } + public struct HitInAirParam { } + #region Idle IEnumerator Idle(IdleParam param) @@ -149,12 +152,46 @@ public class MonsterState : UnitState void OnHitAirExit(EUnitState nextState) { + } + + #endregion + + #region HitInAir + + IEnumerator HitInAir(HitInAirParam param) + { + ((MonsterController)owner).FaceToFacePC(); + m_Owner.monsterAnimation.AnimHitInAir(); + yield return null; + float vy = -1f; + float g = -15.8f; + while (true) + { + bool reachEnd = m_Owner.monsterAnimation.baseLayer.playbackNormalizedTime == 1; + if (reachEnd) + { + vy += g * Time.deltaTime; + Vector3 pos = owner.transform.position; + pos.y += vy * Time.deltaTime; + if(pos.y <= 0) + { + yield return new WaitForSeconds(0.5f); + ChangeState(EUnitState.Rise, new RiseParam()); + } + owner.transform.position = pos; + } + yield return null; + } } + void OnHitInAirExit(EUnitState nextState) + { + } + #endregion - + #region Rise - + IEnumerator Rise(RiseParam param) { m_Owner.monsterAnimation.AnimRise(); diff --git a/Assets/Scripts/Unit/Controller/MonsterController.cs b/Assets/Scripts/Unit/Controller/MonsterController.cs index 1f5e07c9..03756211 100644 --- a/Assets/Scripts/Unit/Controller/MonsterController.cs +++ b/Assets/Scripts/Unit/Controller/MonsterController.cs @@ -35,10 +35,14 @@ public class MonsterController : UnitController { monsterState.ChangeState(MonsterState.EUnitState.HitLight, new MonsterState.HitLightParam(), true); } - else if(hitbox.hitResponse == ColliderBox.EHitResponse.HitAir) + else if (hitbox.hitResponse == ColliderBox.EHitResponse.HitAir) { monsterState.ChangeState(MonsterState.EUnitState.HitAir, new MonsterState.HitAirParam()); } + else if (hitbox.hitResponse == ColliderBox.EHitResponse.HitInAir) + { + monsterState.ChangeState(MonsterState.EUnitState.HitInAir, new MonsterState.HitInAirParam(), true); + } string path = hitbox.sparkPath; GameObject vfx = ResourceManager.Instance.LoadAsset(path); @@ -82,4 +86,10 @@ public class MonsterController : UnitController } } + public virtual void FaceToFacePC() + { + PCController pc = PCController.instance; + transform.rotation = Quaternion.Euler(0, 180, 0) * pc.transform.rotation; + } + } \ No newline at end of file diff --git a/Assets/Scripts/Unit/UnitRootMotion.cs b/Assets/Scripts/Unit/UnitRootMotion.cs index 86e44abd..98789725 100644 --- a/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Assets/Scripts/Unit/UnitRootMotion.cs @@ -93,7 +93,9 @@ public class UnitRootMotion : UnitComponent m_PrevAnimationData = animData; m_PrevFrame = frame; } - Vector3 dest = rmData.GetRootMotionDistance(m_PrevFrame, frame); + if (m_PrevFrame > frame) + m_PrevFrame = frame; + Vector3 dest = rmData.GetRootMotionDistance(m_PrevFrame, frame); Vector3 realDest = m_Owner.transform.rotation * dest; m_Owner.transform.position += realDest; m_PrevFrame = frame; -- cgit v1.1-26-g67d0