summaryrefslogtreecommitdiff
path: root/Erika/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2022-11-17 23:08:18 +0800
committerchai <215380520@qq.com>2022-11-17 23:08:18 +0800
commit95732f7fb714cf32eaf0dbed66e424a92759df17 (patch)
tree099ae148039a1ecff76324c70acb29e878f1203d /Erika/Assets/Scripts/Unit
parent8a1d25f795a121be670f3053d544c523ce45c4f3 (diff)
* input
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
-rw-r--r--Erika/Assets/Scripts/Unit/AnimationData.cs6
-rw-r--r--Erika/Assets/Scripts/Unit/AnimationType.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs3
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs9
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs3
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs3
-rw-r--r--Erika/Assets/Scripts/Unit/Controller/UnitController.cs69
-rw-r--r--Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs14
-rw-r--r--Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs18
-rw-r--r--Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/Skill/ComboData.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/Skill/SkillData.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/TimelineEventProxy.cs1
-rw-r--r--Erika/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs29
15 files changed, 152 insertions, 31 deletions
diff --git a/Erika/Assets/Scripts/Unit/AnimationData.cs b/Erika/Assets/Scripts/Unit/AnimationData.cs
index 4b4670f2..802ca291 100644
--- a/Erika/Assets/Scripts/Unit/AnimationData.cs
+++ b/Erika/Assets/Scripts/Unit/AnimationData.cs
@@ -110,12 +110,14 @@ public struct ActionSettings
[SerializeField] public bool isGun;
// CD时间(秒)
[SerializeField] public float cooldown;
- //
+ // 是否是攻击技能
[SerializeField] public bool isAttack;
// 禁用速度曲线
[SerializeField] public bool disableTimeCurve;
// 如果禁用速度曲线,用这个默认速度
- [SerializeField] public float defaultPlaySpeed;
+ [SerializeField] public float defaultPlaySpeed;
+ // 动作播放期间屏蔽hurtbox
+ [SerializeField] public bool disableHurtBox;
}
[Serializable]
diff --git a/Erika/Assets/Scripts/Unit/AnimationType.cs b/Erika/Assets/Scripts/Unit/AnimationType.cs
index 365e580e..06275324 100644
--- a/Erika/Assets/Scripts/Unit/AnimationType.cs
+++ b/Erika/Assets/Scripts/Unit/AnimationType.cs
@@ -17,6 +17,8 @@ public enum EAnimationType
Stun_Idle = 2,
Move = 3,
Run = 4,
+ Landing = 5,
+ Rising = 6,
/// <summary>
/// 受击
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs
index f2a10e76..180f3914 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs
@@ -9,6 +9,7 @@ using UnityEditor;
//https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.html
//https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.ApplyOverrides.html
+//https://www.zhihu.com/question/442605210
//Animator不能自动跳转动作,一切都应该以脚本控制,保证所有状态判断的有效性和准确性
@@ -393,7 +394,7 @@ public class UnitMotion : UnitComponent
}
/// <summary>
- /// 用trigger跳转动作
+ /// 用trigger跳转动作。比crossfade要好一点,不会出现crossfade到同一个动作时导致慢动作的问题。
/// </summary>
/// <param name="animType"></param>
public void Trigger(EAnimationType animType)
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs
index 443450f0..d988e35d 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs
@@ -18,7 +18,14 @@ namespace UnitStates.Common
public override void OnEnter(IStateParam param)
{
- m_Motion.Trigger(EAnimationType.Idle);
+ if(m_Owner.isInAir)
+ {
+ m_Owner.unitStatemachine.ChangeState(EUnitState.Landing);
+ }
+ else
+ {
+ m_Motion.Trigger(EAnimationType.Idle);
+ }
}
public override void OnExit()
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs
index 421d0c48..f20d0c6d 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs
@@ -41,9 +41,6 @@ namespace UnitStates.Common
public override void OnUpdate()
{
- //if (m_Owner.unitMotion.IsReachEnd())
- // m_Owner.unitStatemachine.ChangeState(EUnitState.Idle, null);
-
if (unitMotion.IsCurrent(m_MotionId) && unitMotion.IsReachEnd())
{
fsm.ChangeState(EUnitState.Idle);
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs
index ef70beaa..8c3351a2 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs
@@ -40,6 +40,9 @@ public enum EUnitState // Unit State Preset
GimmickState = 1 << 24, // 기믹 상태
HitAir2 = 1 << 25,
Knockdown2 = 1 << 26,
+
+ Landing = 1 << 27,
+
_MAX_,
}
diff --git a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
index 9f765aae..49d0aa79 100644
--- a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
+++ b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
@@ -92,21 +92,23 @@ public class UnitController : MonoBehaviour/*, Interactable*/
}
}
- public virtual bool isOnGround
- {
- get
- {
- return transform.position.y <= 0f;
- }
- }
-
- public bool isInAir
- {
- get
- {
- return !isOnGround;
- }
- }
+ // 不能用坐标检测,不太可靠
+
+ //public virtual bool isOnGround
+ //{
+ // get
+ // {
+ // return transform.position.y <= 0f;
+ // }
+ //}
+
+ //public bool isInAir
+ //{
+ // get
+ // {
+ // return !isOnGround;
+ // }
+ //}
private string m_Folder;
public string folder
@@ -185,6 +187,19 @@ public class UnitController : MonoBehaviour/*, Interactable*/
#endregion //位置
+ #region 身体检测
+
+ public bool isInAir { get { return m_IsInAir; } }
+ private bool m_IsInAir; // 是否浮空
+
+ public bool isFalling { get { return m_IsFalling; } }
+ private bool m_IsFalling; // 是否下落
+
+ public bool isRising { get { return m_IsRising; } }
+ private bool m_IsRising; // 是否上升
+
+ #endregion
+
public virtual void Initialize(GameObject model, UnitProfile profile)
{
unitComponents = new List<UnitComponent>();
@@ -195,6 +210,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/
// 初始化组件
Initialize(profile);
OnPostInitailize();
+
+ onTimelineEvent += OnTimelineEvent;
}
protected virtual void Initialize(UnitProfile profile)
@@ -344,6 +361,26 @@ public class UnitController : MonoBehaviour/*, Interactable*/
{
}
- #endregion
+ #endregion
+
+ #region Timeline
+ void OnTimelineEvent(AnimationEventBase animEvent)
+ {
+ if(animEvent is EventUnit_SetPosition)
+ {
+ EventUnit_SetPosition setPos = animEvent as EventUnit_SetPosition;
+ Vector3 pos = transform.position;
+ if (setPos.setY)
+ {
+ pos.y = setPos.y;
+ }
+ transform.position = pos;
+ }
+ else if(animEvent is EventUnit_SetInAir)
+ {
+ m_IsInAir = (animEvent as EventUnit_SetInAir).isInAir;
+ }
+ }
+ #endregion
} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs b/Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs
new file mode 100644
index 00000000..89b5de5f
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventUnit_SetInAir : AnimationEventBase
+{
+ public override TimelineEventProxy.EEventType type => TimelineEventProxy.EEventType.EventUnit_SetInAir;
+
+ public override string shortName => "A";
+
+ [Tooltip("是否在空中")]
+ public bool isInAir;
+
+}
diff --git a/Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs.meta b/Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs.meta
new file mode 100644
index 00000000..5ac5ddb1
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Events/EventUnit_SetInAir.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a4715829bdd36124d89f12f7510264df
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs b/Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs
new file mode 100644
index 00000000..4c04f403
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventUnit_TriggerAnim : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs.meta b/Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs.meta
new file mode 100644
index 00000000..085fac0a
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Events/EventUnit_TriggerAnim.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5b81328650f535949963122b20e35e36
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/Skill/ComboData.cs b/Erika/Assets/Scripts/Unit/Skill/ComboData.cs
index 9ce309dc..3cd500d0 100644
--- a/Erika/Assets/Scripts/Unit/Skill/ComboData.cs
+++ b/Erika/Assets/Scripts/Unit/Skill/ComboData.cs
@@ -10,6 +10,8 @@ public class ComboData //: ScriptableObject
[SerializeField]
public string name;
+ public bool hide;
+
[Tooltip("连招唯一ID")]
[SerializeField]
public int uid;
diff --git a/Erika/Assets/Scripts/Unit/Skill/SkillData.cs b/Erika/Assets/Scripts/Unit/Skill/SkillData.cs
index a0d96c96..391e3dd3 100644
--- a/Erika/Assets/Scripts/Unit/Skill/SkillData.cs
+++ b/Erika/Assets/Scripts/Unit/Skill/SkillData.cs
@@ -13,6 +13,8 @@ public class SkillData /*: ScriptableObject*/
[SerializeField]
public string name;
+ public bool hide;
+
[Tooltip("技能唯一ID")]
[SerializeField]
public int uid;
diff --git a/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs b/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs
index ec023c76..bf550f77 100644
--- a/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs
+++ b/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs
@@ -70,6 +70,7 @@ public partial class TimelineEventProxy
EventUnit_SetPosition, // 设置位置
EventUnit_BulletTime, // 子弹时间
+ EventUnit_SetInAir, // 设置浮空状态
EventCamera_Zoom, // 相机聚焦
EventCamera_Shake, // 相机晃动
diff --git a/Erika/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Erika/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
index cc352324..c53bc33e 100644
--- a/Erika/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
+++ b/Erika/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
@@ -153,13 +153,24 @@ public partial class TimelineEventProxy
}
avatar.Initialize(owner);
}
- }
-
- void EventUnit_SetPosition(AnimationEventBase animEvent)
- {
- // 在unitState回调里处理
- }
-
+ }
+
+ #region Unit
+
+ void EventUnit_SetPosition(AnimationEventBase animEvent)
+ {
+ // 在unitState回调里处理
+
+ }
+
+ void EventUnit_SetInAir(AnimationEventBase animEvent)
+ {
+ // 在unitState回调里处理
+
+ }
+
+ #endregion
+
void EventMesh_VisibilityInMainCamera(AnimationEventBase animEvent)
{
EventMesh_VisibilityInMainCamera visible = animEvent as EventMesh_VisibilityInMainCamera;
@@ -198,6 +209,8 @@ public partial class TimelineEventProxy
owner.unitLensEffect.Dash(Color.white, dashinfo.lifeTime, dashinfo.angle, info);
}
- #endregion
+ #endregion
+
+
} \ No newline at end of file