summaryrefslogtreecommitdiff
path: root/Erika/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2022-11-15 09:57:41 +0800
committerchai <215380520@qq.com>2022-11-15 09:57:41 +0800
commitb434e79de6623ed101896f371b0a00d27d76236d (patch)
tree576f79f6dace82d17c813d11112ccf9e18e3acc3 /Erika/Assets/Scripts/Unit
parent8578d0ef8b77a86c156168dd77293289eef47f48 (diff)
* 增加motion逻辑
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
-rw-r--r--Erika/Assets/Scripts/Unit/AnimationData.cs8
-rw-r--r--Erika/Assets/Scripts/Unit/AnimatorState.cs51
-rw-r--r--Erika/Assets/Scripts/Unit/AnimatorState.cs.meta (renamed from Erika/Assets/Scripts/Unit/UnitActionData.cs.meta)2
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs4
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs5
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs10
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAction.cs61
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitCollider.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitSkill.cs1
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs3
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs22
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs11
-rw-r--r--Erika/Assets/Scripts/Unit/Controller/UnitController.cs22
-rw-r--r--Erika/Assets/Scripts/Unit/Skill.meta8
-rw-r--r--Erika/Assets/Scripts/Unit/Skill/ComboData.cs16
-rw-r--r--Erika/Assets/Scripts/Unit/Skill/ComboData.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/Skill/SkillData.cs23
-rw-r--r--Erika/Assets/Scripts/Unit/Skill/SkillData.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/TransitionData.cs12
-rw-r--r--Erika/Assets/Scripts/Unit/UnitActionData.cs44
-rw-r--r--Erika/Assets/Scripts/Unit/UnitMotionData.cs67
-rw-r--r--Erika/Assets/Scripts/Unit/UnitMotionData.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/UnitProfile.cs42
-rw-r--r--Erika/Assets/Scripts/Unit/UnitProfile.cs.meta11
24 files changed, 361 insertions, 97 deletions
diff --git a/Erika/Assets/Scripts/Unit/AnimationData.cs b/Erika/Assets/Scripts/Unit/AnimationData.cs
index 2b5186a3..2d324d49 100644
--- a/Erika/Assets/Scripts/Unit/AnimationData.cs
+++ b/Erika/Assets/Scripts/Unit/AnimationData.cs
@@ -12,6 +12,11 @@ public enum EAnimationToogle
Combo = 0, // 连击
SuperArmor = 1, // 霸体
Break = 2, // 打断
+
+ SkillLink = 3, // 技能连招
+ Link = 4, // 普攻连招
+ MoveLink = 5, // 接移动
+
}
[Serializable]
@@ -194,7 +199,8 @@ public class RootMotionOverrideData
/// <summary>
-/// 单个动画的数据,包括帧事件、碰撞盒、速度曲线
+/// 单个动画的数据,包括帧事件、碰撞盒、速度曲线。
+/// 20221114: 不涉及游戏逻辑,应该脱离状态机和角色。
/// </summary>
[CreateAssetMenu(fileName = "Animation Data")]
public class AnimationData : ScriptableObject
diff --git a/Erika/Assets/Scripts/Unit/AnimatorState.cs b/Erika/Assets/Scripts/Unit/AnimatorState.cs
new file mode 100644
index 00000000..bb7685aa
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/AnimatorState.cs
@@ -0,0 +1,51 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 在Animator controller里的state名,在override controller时会进行替换
+/// </summary>
+public enum EAnimatorState
+{
+ None = 0,
+
+ // locomotion
+ __Localmotion = 1,
+ Idle,
+ Move,
+ Jump,
+ Landing,
+
+ // 技能
+ __Skill = 40,
+ Attack,
+ QTE,
+
+ // 技能combo
+ __Combo = 80,
+ Attack0,
+ Attack1,
+ Attack2,
+ Attack3,
+ Attack4,
+ Attack5,
+
+ // 终结技分段
+ __Special = 120,
+ Phase0,
+ Phase1,
+ Phase2,
+ Phase3,
+ Phase4,
+ Phase5,
+ Phase6,
+ Phase7,
+ Phase8,
+ Phase9,
+
+ // 受击
+ __GetHit = 160,
+ HeavyHit,
+ HitGround,
+
+}
diff --git a/Erika/Assets/Scripts/Unit/UnitActionData.cs.meta b/Erika/Assets/Scripts/Unit/AnimatorState.cs.meta
index ed3d6b70..676d109d 100644
--- a/Erika/Assets/Scripts/Unit/UnitActionData.cs.meta
+++ b/Erika/Assets/Scripts/Unit/AnimatorState.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 34c4f0be042b58840bbd5f39068e5007
+guid: 9224147f079ad6542ba9551d90318b75
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs b/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs
index 1a5d3916..507e283d 100644
--- a/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs
+++ b/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs
@@ -14,10 +14,10 @@ public partial class ColliderBox
}
// 分化为不同的collider类型
+ // Collider都是在角色空间,以角色根节点为父节点(和特效不同,特效可以在世界空间,也可以绑定到骨骼)
public enum EColliderType
{
- Begin = 0,
-
+ //Begin = 0,
HitBox = 0, // Triggers //Physics.OverlapXXX()
HurtBox, // Triggers
ThrowBox, // Triggers
diff --git a/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs
index 5d7e5d5d..2af3442a 100644
--- a/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs
+++ b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs
@@ -66,11 +66,6 @@ public class CollisionHandler : MonoBehaviour
m_Owner.OnCollision(otherHandler.m_Owner, this, otherHandler);
}
- //if(otherHandler.m_Owner != null)
- //{
- // otherHandler.m_Owner.OnCollision(m_Owner, otherHandler, this);
- //}
-
}
public void OnTriggerStay(Collider other)
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs
index 8ddf61f8..f6d19495 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs
@@ -147,9 +147,9 @@ public class PCAnimation : UnitAction
return data;
}
- ////////////////////////////////////////////////////////////////////////////////////////////////////////
+ #region Anim
- public void AnimIdle()
+ public void AnimIdle()
{
CrossFade(EActionState.Idle, 0.2f, 0);
}
@@ -228,8 +228,10 @@ public class PCAnimation : UnitAction
public void AnimLandingGround()
{
CrossFade(EActionState.LandingGround, 0.00f);
- }
-
+ }
+
+ #endregion
+
private void Play(EActionState animState, float normalizedTime = float.NegativeInfinity)
{
base.Play(animState.ToString(), normalizedTime);
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAction.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAction.cs
index 079a58ec..9a398404 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAction.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitAction.cs
@@ -7,6 +7,9 @@ using UnityEngine;
using UnityEditor;
#endif
+//https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.html
+//https://docs.unity3d.com/ScriptReference/AnimatorOverrideController.ApplyOverrides.html
+
/// <summary>
/// 角色动作管理
/// http://unitylore.org/wiki/doku.php?id=l3y0gj
@@ -15,7 +18,7 @@ using UnityEditor;
public class UnitAction : UnitComponent
{
// 角色的所有动作数据,包括(动画、事件、RM)
- public UnitActionData m_ActionData;
+ //public UnitActionData m_ActionData;
// 当前动作,和AnimatorState不同,忽略过渡,即时切换
protected string m_CurrentAction = "Idle";
@@ -53,7 +56,7 @@ public class UnitAction : UnitComponent
{
if (m_Dirty)
{
- m_CachedAnimationData = m_ActionData.GetAnimationData(currentAction);
+ //m_CachedAnimationData = m_ActionData.GetAnimationData(currentAction);
m_Dirty = false;
}
return m_CachedAnimationData;
@@ -192,31 +195,31 @@ public class UnitAction : UnitComponent
/// <param name="normalizedTransitionTime"></param>
public void CrossFade(string targetAction, float normalizedTransitionDuration, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
{
- TransitionData transition = m_ActionData.GetTransitionData(currentAction, targetAction);
- if(transition != null)
- {
- if(transition.type == TransitionData.TransitionType.NormalizedTime)
- {
- m_Animator.CrossFade(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime);
- }
- else if(transition.type == TransitionData.TransitionType.FixedTime)
- {
- m_Animator.CrossFadeInFixedTime(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime);
- }
- }
- else
- {
- m_Animator.CrossFade(targetAction, normalizedTransitionDuration, 0, normalizedTimeOffset, normalizedTransitionTime);
- }
- currentAction = targetAction;
-
- m_TimelineEventProxy.ResetPrevAnimationData();
-
- UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
- if (rm)
- {
- rm.OnAnimationChange();
- }
+ //TransitionData transition = m_ActionData.GetTransitionData(currentAction, targetAction);
+ //if(transition != null)
+ //{
+ // if(transition.type == TransitionData.TransitionType.NormalizedTime)
+ // {
+ // m_Animator.CrossFade(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime);
+ // }
+ // else if(transition.type == TransitionData.TransitionType.FixedTime)
+ // {
+ // m_Animator.CrossFadeInFixedTime(targetAction, transition.duration, 0, normalizedTimeOffset, normalizedTransitionTime);
+ // }
+ //}
+ //else
+ //{
+ // m_Animator.CrossFade(targetAction, normalizedTransitionDuration, 0, normalizedTimeOffset, normalizedTransitionTime);
+ //}
+ //currentAction = targetAction;
+
+ //m_TimelineEventProxy.ResetPrevAnimationData();
+
+ //UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
+ //if (rm)
+ //{
+ // rm.OnAnimationChange();
+ //}
}
/// <summary>
@@ -228,4 +231,8 @@ public class UnitAction : UnitComponent
}
+ public void PlayMotion(int motionId)
+ {
+ }
+
}
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs
index 1f08a54e..348ceae5 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs
@@ -88,7 +88,7 @@ public class UnitCollider : UnitComponent
{
m_ActiveColliders.Clear();
- for (int i = (int)ColliderBox.EColliderType.Begin; i < (int)ColliderBox.EColliderType.End; ++i)
+ for (int i = (int)ColliderBox.EColliderType.HitBox; i < (int)ColliderBox.EColliderType.End; ++i)
{
ColliderBox.EColliderType colliderType = (ColliderBox.EColliderType)i;
ColliderInfo[] activeColliders = GetCurrentBoxesInfoByType(colliderType);
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs b/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs
index 1fd6cc43..92676e73 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs
@@ -10,4 +10,5 @@ public class UnitSkill : UnitComponent
{
+
}
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs
index 1a8d0010..d81abc50 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs
@@ -99,7 +99,8 @@ public partial class PCState : UnitState
// m_Owner.transform.rotation = Quaternion.Euler(0, 0, 0);
//else
// m_Owner.transform.rotation = Quaternion.Euler(0, 180, 0);
- m_Owner.transform.rotation = Quaternion.Euler(0, param.isRight ? 0 : 180, 0);
+ //m_Owner.transform.rotation = Quaternion.Euler(0, param.isRight ? 0 : 180, 0);
+ m_Owner.Turn(param.isRight);
}
//if (Input.GetKey(param.key))
m_Owner.pcAnimation.AnimMove();
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs
index b15aeb38..e9843310 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs
@@ -37,6 +37,28 @@ public class UnitState : UnitComponent
{
return owner.unitAnimation.IsToggleOpen(EAnimationToogle.Combo);
}
+ }
+
+ public virtual bool isSkillLink
+ {
+ get
+ {
+ return owner.unitAnimation.IsToggleOpen(EAnimationToogle.SkillLink);
+ }
+ }
+ public virtual bool isMoveLink
+ {
+ get
+ {
+ return owner.unitAnimation.IsToggleOpen(EAnimationToogle.MoveLink);
+ }
+ }
+ public virtual bool isLink
+ {
+ get
+ {
+ return owner.unitAnimation.IsToggleOpen(EAnimationToogle.Link);
+ }
}
} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs
index a772be45..6fbdc6fd 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs
@@ -2,14 +2,21 @@
using System.Collections.Generic;
using UnityEngine;
-// 从RoR2引入。比针对某个状态定义枚举,因为每一个角色的状态有所不同,不应该通过枚举跳转,应该直接
-// 通过状态跳转比较好。或者每个不同类型的角色自己定义枚举。
+/// 从RoR2引入。比针对某个状态定义枚举,因为每一个角色的状态有所不同,不应该通过枚举跳转,应该直接
+/// 通过状态跳转比较好。或者每个不同类型的角色自己定义枚举。
/// <summary>
/// 角色状态机
/// </summary>
public class UnitStatemachine : UnitComponent
{
+ public enum EUnitState
+ {
+ Idle,
+ Move,
+ Skill,
+
+ }
// 当前状态
private UnitStateBase m_CurrentState;
diff --git a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
index a768a98a..df587f85 100644
--- a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
+++ b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
@@ -9,6 +9,9 @@ using UnityEngine;
// void OnGrab();
//}
+/// <summary>
+/// 角色控制器,包含所有角色组件的引用
+/// </summary>
public class UnitController : MonoBehaviour/*, Interactable*/
{
public enum UnitType
@@ -60,8 +63,9 @@ public class UnitController : MonoBehaviour/*, Interactable*/
#region 事件监听
public delegate void OnTimelineEventHandle(AnimationEventBase animEvent);
public OnTimelineEventHandle onTimelineEvent { get; set; }
- #endregion
+ #endregion
+ #region 朝向
// 朝向
public Quaternion faceRotation
{
@@ -88,6 +92,7 @@ public class UnitController : MonoBehaviour/*, Interactable*/
return isTowardRight ? 1 : -1;
}
}
+ #endregion
public virtual bool isOnGround
{
@@ -295,6 +300,21 @@ public class UnitController : MonoBehaviour/*, Interactable*/
return snapshot;
}
+ /// <summary>
+ /// 设置朝向
+ /// </summary>
+ /// <param name="faceRight">朝右</param>
+ public void Turn(bool faceRight)
+ {
+ float eularY = base.transform.eulerAngles.y;
+ eularY = (faceRight ? 0f : 180f);
+ Vector3 newRot = new Vector3(base.transform.eulerAngles.x, eularY, base.transform.eulerAngles.z);
+ if (faceRight != this.isTowardRight)
+ {
+ base.transform.eulerAngles = newRot;
+ }
+ }
+
#region 物理碰撞
public void OnCollision(UnitController other, CollisionHandler selfHandler, CollisionHandler otherHandler)
diff --git a/Erika/Assets/Scripts/Unit/Skill.meta b/Erika/Assets/Scripts/Unit/Skill.meta
new file mode 100644
index 00000000..44f98c4b
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Skill.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d235538df6544a3418b118635a995c9e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/Skill/ComboData.cs b/Erika/Assets/Scripts/Unit/Skill/ComboData.cs
new file mode 100644
index 00000000..c0ad6166
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Skill/ComboData.cs
@@ -0,0 +1,16 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[CreateAssetMenu(fileName = "New Combo", menuName = "Erika/Combo")]
+public class ComboData : ScriptableObject
+{
+
+ [Tooltip("combo名,如果有的话")]
+ public string name;
+
+ [Tooltip("按照顺序")]
+ public List<SkillData> skills;
+
+
+} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/Skill/ComboData.cs.meta b/Erika/Assets/Scripts/Unit/Skill/ComboData.cs.meta
new file mode 100644
index 00000000..df1a9f1d
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Skill/ComboData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d0a00e1faabdfce4eb049d7ff01ef424
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/Skill/SkillData.cs b/Erika/Assets/Scripts/Unit/Skill/SkillData.cs
new file mode 100644
index 00000000..626077b9
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Skill/SkillData.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 技能数据,包括伤害、动作
+/// </summary>
+[CreateAssetMenu(fileName ="New Skill", menuName = "Erika/Skill")]
+public class SkillData : ScriptableObject
+{
+ [Tooltip("技能唯一ID")]
+ public int uid;
+
+ // 技能名(如果有的话,哈哈)
+ public string name;
+
+ [Tooltip("动作唯一ID,在motionData中")]
+ public int motionId;
+
+ [Tooltip("伤害值")]
+ public float damage;
+
+} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/Skill/SkillData.cs.meta b/Erika/Assets/Scripts/Unit/Skill/SkillData.cs.meta
new file mode 100644
index 00000000..5075dd56
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Skill/SkillData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 564cd571be53c384c8cd5c1007d22484
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/TransitionData.cs b/Erika/Assets/Scripts/Unit/TransitionData.cs
index da79fd14..8ff77eec 100644
--- a/Erika/Assets/Scripts/Unit/TransitionData.cs
+++ b/Erika/Assets/Scripts/Unit/TransitionData.cs
@@ -9,15 +9,11 @@ using UnityEngine;
[Serializable]
public class TransitionData
{
- // A->B
- public string transition;
- //// 起始动画
- //public string fromAnimation;
- //// 结束动画
- //public string toAnimation;
-
[Tooltip("是否开启重载")]
- public bool enabled = true;
+ public bool enabled = true;
+
+ public int fromId;
+ public int toId;
public enum TransitionType
{
diff --git a/Erika/Assets/Scripts/Unit/UnitActionData.cs b/Erika/Assets/Scripts/Unit/UnitActionData.cs
deleted file mode 100644
index 82c68bd0..00000000
--- a/Erika/Assets/Scripts/Unit/UnitActionData.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-[Serializable]
-public class TriggerAnimationDictionary
- : SerializableDictionary<string/*override clip name\state name*/, AnimationData> { }
-
-/// <summary>
-/// 角色动作配置,状态名-动作
-/// </summary>
-[CreateAssetMenu(fileName = "Unit Action Data")]
-public class UnitActionData : ScriptableObject
-{
- [Tooltip("所参照的AnimatorController")]
- public RuntimeAnimatorController referenceController;
-
- [Tooltip("所有动作和对应的动画片段")]
- public TriggerAnimationDictionary actions;
-
- [Tooltip("默认过渡时间")]
- public float defaultTransitionNormalizedTime = 0.02f;
-
- [Tooltip("设置动作间过渡时间")]
- public List<TransitionData> overrideTransitions;
-
- public AnimationData GetAnimationData(string actionName)
- {
- AnimationData animData;
- if(actions.TryGetValue(actionName, out animData))
- {
- return animData;
- }
- return null;
- }
-
- public TransitionData GetTransitionData(string from, string to)
- {
- var transition = overrideTransitions.Find(t => t.transition == from + "->" + to && t.enabled);
- return transition;
- }
-
-}
diff --git a/Erika/Assets/Scripts/Unit/UnitMotionData.cs b/Erika/Assets/Scripts/Unit/UnitMotionData.cs
new file mode 100644
index 00000000..5dc01498
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/UnitMotionData.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 动作元数据
+/// </summary>
+[Serializable]
+public struct MotionData
+{
+ [SerializeField] public bool hide;
+ [SerializeField] public int uid; // 动作在角色作用域下的唯一编号
+ [SerializeField] public string note;
+ [SerializeField, Tooltip("理论上是角色能够访问动作数据的唯一一个入口")] public AnimationData animationData; // 理论上是角色能够访问动作数据的唯一一个入口,其他地方通过uid拿这里的数据
+ [SerializeField] public EAnimatorState animatorState;
+}
+
+[Serializable]
+public class TriggerAnimationDictionary
+ : SerializableDictionary<string/*override clip name\state name*/, AnimationData> { }
+
+/// <summary>
+/// 角色*所有*动作配置,状态名-动作
+/// Unit actions collection
+/// </summary>
+[CreateAssetMenu(fileName = "Unit Motion Data")]
+public class UnitMotionData : ScriptableObject
+{
+#if false
+ //[Tooltip("所有动作和对应的动画片段")]
+ //public TriggerAnimationDictionary actions;
+
+ //[Tooltip("默认过渡时间")]
+ //public float defaultTransitionNormalizedTime = 0.02f;
+
+ //[Tooltip("设置动作间过渡时间")]
+ //public List<TransitionData> overrideTransitions;
+
+
+ //public AnimationData GetAnimationData(string actionName)
+ //{
+ // AnimationData animData;
+ // if(actions.TryGetValue(actionName, out animData))
+ // {
+ // return animData;
+ // }
+ // return null;
+ //}
+
+ //public TransitionData GetTransitionData(string from, string to)
+ //{
+ // var transition = overrideTransitions.Find(t => t.transition == from + "->" + to && t.enabled);
+ // return transition;
+ //}
+#endif
+
+ [Tooltip("所参照的AnimatorController")]
+ public RuntimeAnimatorController referenceController;
+
+ [Space(5)]
+ public List<MotionData> allMotions;
+
+ [Space(5)]
+ [Tooltip("设置动作间过渡时间")]
+ public List<TransitionData> overrideTransitions;
+}
diff --git a/Erika/Assets/Scripts/Unit/UnitMotionData.cs.meta b/Erika/Assets/Scripts/Unit/UnitMotionData.cs.meta
new file mode 100644
index 00000000..d9834cf6
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/UnitMotionData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4aae1738f87f4ba4c90c431085c2c1c3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/UnitProfile.cs b/Erika/Assets/Scripts/Unit/UnitProfile.cs
new file mode 100644
index 00000000..37e07c7a
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/UnitProfile.cs
@@ -0,0 +1,42 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 用这个表创建unit
+/// </summary>
+[CreateAssetMenu(fileName = "New Unit Profile", menuName = "Erika/Unit Profile")]
+public class UnitProfile : ScriptableObject
+{
+
+ /// <summary>
+ /// 角色唯一编号
+ /// </summary>
+ public int uid;
+
+ [Header("基础设置")]
+ [Space(5)]
+ public string unitName;
+
+ //public UnitActionData actionData;
+
+ [Tooltip("角色所有动作")]
+ public UnitMotionData motionData;
+
+ public string unitFolder;
+
+ public GameObject unitControllerPrefab;
+
+ public GameObject unitPrefab;
+
+ public RuntimeAnimatorController animController;
+
+ [Header("技能相关")]
+ [Space(5)]
+ [Tooltip("技能")]
+ public List<SkillData> skills;
+
+ [Tooltip("连招")]
+ public List<ComboData> combos;
+
+} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/UnitProfile.cs.meta b/Erika/Assets/Scripts/Unit/UnitProfile.cs.meta
new file mode 100644
index 00000000..7da1d88a
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/UnitProfile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fd54f30a1d014ba44a8bb1d8b53c50ba
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: