diff options
author | chai <215380520@qq.com> | 2022-11-17 23:08:18 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2022-11-17 23:08:18 +0800 |
commit | 95732f7fb714cf32eaf0dbed66e424a92759df17 (patch) | |
tree | 099ae148039a1ecff76324c70acb29e878f1203d /Erika/Assets/Scripts/Unit | |
parent | 8a1d25f795a121be670f3053d544c523ce45c4f3 (diff) |
* input
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
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 |