diff options
author | chai <215380520@qq.com> | 2022-11-15 09:57:41 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2022-11-15 09:57:41 +0800 |
commit | b434e79de6623ed101896f371b0a00d27d76236d (patch) | |
tree | 576f79f6dace82d17c813d11112ccf9e18e3acc3 /Erika/Assets/Scripts/Unit | |
parent | 8578d0ef8b77a86c156168dd77293289eef47f48 (diff) |
* 增加motion逻辑
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
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: |