diff options
Diffstat (limited to 'Assets/Scripts')
-rw-r--r-- | Assets/Scripts/Test 1/TestErika.cs | 14 | ||||
-rw-r--r-- | Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs | 8 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs | 15 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs | 6 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Components/UnitState/MonsterState.cs | 41 | ||||
-rw-r--r-- | Assets/Scripts/Unit/Controller/MonsterController.cs | 12 | ||||
-rw-r--r-- | Assets/Scripts/Unit/UnitRootMotion.cs | 4 |
7 files changed, 85 insertions, 15 deletions
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<GameObject>(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;
|