summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/Test 1/TestErika.cs14
-rw-r--r--Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs8
-rw-r--r--Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs15
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs6
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/MonsterState.cs41
-rw-r--r--Assets/Scripts/Unit/Controller/MonsterController.cs12
-rw-r--r--Assets/Scripts/Unit/UnitRootMotion.cs4
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;