summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-08-03 19:33:43 +0800
committerchai <chaifix@163.com>2021-08-03 19:33:43 +0800
commit494d3f727786ff70753692d8de019d9600a007e1 (patch)
tree1b328a0d2d8943157903065ca3441b9f6485e3f9
parent31666a451a74183b74557208812a9b47053c3f08 (diff)
*misc
-rw-r--r--Assets/ActionTool/Editor/ActionColliderFrameEditor.cs4
-rw-r--r--Assets/ActionTool/Editor/ActionData.cs6
-rw-r--r--Assets/ActionTool/Editor/ActionManager.cs4
-rw-r--r--Assets/ActionTool/Editor/ActionPreviewEditor.cs4
-rw-r--r--Assets/ActionTool/Editor/ActionToolSettingsEditor.cs2
-rw-r--r--Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller62
-rw-r--r--Assets/Scripts/Input/InputManager.cs2
-rw-r--r--Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs10
-rw-r--r--Assets/Scripts/Unit/Action/WaitForLanding.cs25
-rw-r--r--Assets/Scripts/Unit/Action/WaitForLanding.cs.meta (renamed from Assets/Scripts/Unit/TimelineEvent.cs.meta)2
-rw-r--r--Assets/Scripts/Unit/Action/WaitForTransitionDone.cs25
-rw-r--r--Assets/Scripts/Unit/Action/WaitForTransitionDone.cs.meta11
-rw-r--r--Assets/Scripts/Unit/AnimationData.cs7
-rw-r--r--Assets/Scripts/Unit/Component/UnitAnimation.cs195
-rw-r--r--Assets/Scripts/Unit/Component/UnitState.cs86
-rw-r--r--Assets/Scripts/Unit/Controller/PCController.cs3
-rw-r--r--Assets/Scripts/Unit/Controller/UnitController.cs16
-rw-r--r--Assets/Scripts/Unit/Events/AnimationEventBase.cs2
-rw-r--r--Assets/Scripts/Unit/Events/EventEffect.cs2
-rw-r--r--Assets/Scripts/Unit/Events/EventProjectile.cs2
-rw-r--r--Assets/Scripts/Unit/UnitRootMotion.cs5
-rw-r--r--Assets/Scripts/Unit/UnitTimeline.cs (renamed from Assets/Scripts/Unit/TimelineEvent.cs)18
-rw-r--r--Assets/Scripts/Unit/UnitTimeline.cs.meta11
23 files changed, 356 insertions, 148 deletions
diff --git a/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs
index 91b6d0c3..4efd1f93 100644
--- a/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs
+++ b/Assets/ActionTool/Editor/ActionColliderFrameEditor.cs
@@ -68,14 +68,14 @@ namespace ActionTool
{
ActionData action = ActionManager.actionData;
float normaltime = frame.frame / action.totalFrame;
- action.curAnimTimeNormal = normaltime - 0.01f;
+ action.curAnimTimeNormal = normaltime - 0.001f;
}
if (GUILayout.Button("Right abit"))
{
ActionData action = ActionManager.actionData;
float normaltime = frame.frame / action.totalFrame;
- action.curAnimTimeNormal = normaltime + 0.01f;
+ action.curAnimTimeNormal = normaltime + 0.001f;
}
if (GUILayout.Button("Current"))
diff --git a/Assets/ActionTool/Editor/ActionData.cs b/Assets/ActionTool/Editor/ActionData.cs
index 6116442c..cd76ba8d 100644
--- a/Assets/ActionTool/Editor/ActionData.cs
+++ b/Assets/ActionTool/Editor/ActionData.cs
@@ -20,7 +20,7 @@ namespace ActionTool
private AnimationEventBase m_CurEventInfo; // 当前正在编辑的event
- private TimelineEvent m_Timeline;
+ private UnitTimeline m_Timeline;
#region metadata
private float m_TotalFrame; //timeline采样的总帧数
@@ -67,7 +67,7 @@ namespace ActionTool
m_PrevLocalTime = 0;
m_Animator.Play(kStateName, 0, 0);
m_RootMotion = rootmotion;
- m_Timeline = m_Animator.gameObject.GetComponent<TimelineEvent>();
+ m_Timeline = m_Animator.gameObject.GetOrAddComponent<UnitTimeline>();
}
public void SetCurrentAnimTime(float time)
@@ -196,7 +196,7 @@ namespace ActionTool
m_Timeline.ExecuteAnimationEvents(ActionManager.animationData, m_CurAnimFrame);
}
- public void CreateEvent(TimelineEvent.EEventType eventtype, int startFrame)
+ public void CreateEvent(UnitTimeline.EEventType eventtype, int startFrame)
{
var classes = Assembly
.GetAssembly(typeof(AnimationEventBase))
diff --git a/Assets/ActionTool/Editor/ActionManager.cs b/Assets/ActionTool/Editor/ActionManager.cs
index feefde88..b39dec61 100644
--- a/Assets/ActionTool/Editor/ActionManager.cs
+++ b/Assets/ActionTool/Editor/ActionManager.cs
@@ -425,7 +425,7 @@ namespace ActionTool
public static void AddNewEvent(object param)
{
EventParam eventParam = (EventParam )param;
- string eventName = eventParam.eventName; // TimelineEvent.EEventType
+ string eventName = eventParam.eventName; // UnitTimeline.EEventType
int frame = eventParam.frame;
Debug.Log("[ActionTool] Add new event " + eventName);
if (animationData == null)
@@ -433,7 +433,7 @@ namespace ActionTool
Debug.LogError("[ActionTool] 没有animation data数据");
return;
}
- Type type = TimelineEvent.GetTypeByName(eventName);
+ Type type = UnitTimeline.GetTypeByName(eventName);
if(type == null)
{
Debug.LogError("[ActionTool] 没有创建对应的类, " + eventName);
diff --git a/Assets/ActionTool/Editor/ActionPreviewEditor.cs b/Assets/ActionTool/Editor/ActionPreviewEditor.cs
index 8b13b70a..bbf74743 100644
--- a/Assets/ActionTool/Editor/ActionPreviewEditor.cs
+++ b/Assets/ActionTool/Editor/ActionPreviewEditor.cs
@@ -638,7 +638,7 @@ namespace ActionTool
ActionData action = ActionManager.actionData;
Vector2 position = Event.current.mousePosition;
- Rect eventRegion = new Rect(kTimeLineViewXOffset, m_GridY, action.totalFrame * kFrameWidth, TimelineEvent.kMaxEventsPerFrame * kFrameHeight);
+ Rect eventRegion = new Rect(kTimeLineViewXOffset, m_GridY, action.totalFrame * kFrameWidth, UnitTimeline.kMaxEventsPerFrame * kFrameHeight);
if (!eventRegion.Contains(position))
return;
@@ -646,7 +646,7 @@ namespace ActionTool
int frame = (int)(pos.x / kFrameWidth);
GenericMenu eventMenu = new GenericMenu();
- foreach(var name in Enum.GetNames(typeof(TimelineEvent.EEventType)))
+ foreach(var name in Enum.GetNames(typeof(UnitTimeline.EEventType)))
{
GUIContent item = null;
string shortName = name.Replace("Event", "");
diff --git a/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs b/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs
index ee73f844..2afde647 100644
--- a/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs
+++ b/Assets/ActionTool/Editor/ActionToolSettingsEditor.cs
@@ -35,7 +35,7 @@ public class ActionToolSettingsEditor : Editor
EditorGUI.BeginChangeCheck();
- foreach (var name in Enum.GetNames(typeof(TimelineEvent.EEventType)))
+ foreach (var name in Enum.GetNames(typeof(UnitTimeline.EEventType)))
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField(name);
diff --git a/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller b/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller
index a8fd68de..07d227e0 100644
--- a/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller
+++ b/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller
@@ -14,58 +14,64 @@ AnimatorController:
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToMove
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToJump
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToRise
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToStinger
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToAttack
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToHit
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
- m_Name: ToTurn
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
- - m_Name: Blend
+ m_Controller: {fileID: 0}
+ - m_Name: IsOnGround
+ m_Type: 4
+ m_DefaultFloat: 0
+ m_DefaultInt: 0
+ m_DefaultBool: 0
+ m_Controller: {fileID: 0}
+ - m_Name: Height
m_Type: 1
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
- m_Controller: {fileID: 9100000}
+ m_Controller: {fileID: 0}
m_AnimatorLayers:
- serializedVersion: 5
- m_Name: Base Layer
+ m_Name: Basic
m_StateMachine: {fileID: 1107100304230058010}
m_Mask: {fileID: 0}
m_Motions: []
@@ -77,7 +83,7 @@ AnimatorController:
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
- serializedVersion: 5
- m_Name: Attack Layer
+ m_Name: Attack
m_StateMachine: {fileID: 1107681041014594778}
m_Mask: {fileID: 0}
m_Motions: []
@@ -89,7 +95,7 @@ AnimatorController:
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
- serializedVersion: 5
- m_Name: LowerJumpLayer
+ m_Name: UpperBody
m_StateMachine: {fileID: 1107669995669758872}
m_Mask: {fileID: 31900000, guid: d5a10d76582efb742a48170e6fcec7ca, type: 2}
m_Motions: []
@@ -242,13 +248,13 @@ AnimatorStateTransition:
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
- m_TransitionDuration: 0.1323303
+ m_TransitionDuration: 0.13441938
m_TransitionOffset: 0
- m_ExitTime: 0.8676697
+ m_ExitTime: 0.7576849
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
- m_OrderedInterruption: 1
+ m_OrderedInterruption: 0
m_CanTransitionToSelf: 1
--- !u!1101 &1101494853469579572
AnimatorStateTransition:
@@ -267,13 +273,13 @@ AnimatorStateTransition:
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
- m_TransitionDuration: 0.1229167
+ m_TransitionDuration: 0.1207397
m_TransitionOffset: 0
- m_ExitTime: 0.8770833
+ m_ExitTime: 0.954483
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
- m_OrderedInterruption: 1
+ m_OrderedInterruption: 0
m_CanTransitionToSelf: 1
--- !u!1101 &1101573921585606128
AnimatorStateTransition:
@@ -318,7 +324,7 @@ AnimatorStateTransition:
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.11836755
- m_TransitionOffset: 0.5
+ m_TransitionOffset: 0
m_ExitTime: 0.8641487
m_HasExitTime: 0
m_HasFixedDuration: 1
@@ -601,11 +607,11 @@ AnimatorStateMachine:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_Name: Base Layer
+ m_Name: Basic
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 1102108504916990050}
- m_Position: {x: 120, y: -480, z: 0}
+ m_Position: {x: 156, y: -456, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102289505320285826}
m_Position: {x: 420, y: -588, z: 0}
@@ -614,10 +620,10 @@ AnimatorStateMachine:
m_Position: {x: -144, y: -492, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102099224573621780}
- m_Position: {x: 420, y: -480, z: 0}
+ m_Position: {x: 420, y: -456, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102474951772684744}
- m_Position: {x: 324, y: -324, z: 0}
+ m_Position: {x: 420, y: -324, z: 0}
- serializedVersion: 1
m_State: {fileID: 1102936270698915478}
m_Position: {x: 132, y: -168, z: 0}
@@ -632,8 +638,8 @@ AnimatorStateMachine:
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
- m_AnyStatePosition: {x: -12, y: -576, z: 0}
- m_EntryPosition: {x: 204, y: -636, z: 0}
+ m_AnyStatePosition: {x: -48, y: -576, z: 0}
+ m_EntryPosition: {x: 144, y: -588, z: 0}
m_ExitPosition: {x: -48, y: -684, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1102108504916990050}
@@ -644,7 +650,7 @@ AnimatorStateMachine:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_Name: LowerJumpLayer
+ m_Name: UpperBody
m_ChildStates: []
m_ChildStateMachines: []
m_AnyStateTransitions: []
@@ -663,7 +669,7 @@ AnimatorStateMachine:
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
- m_Name: Attack Layer
+ m_Name: Attack
m_ChildStates: []
m_ChildStateMachines: []
m_AnyStateTransitions: []
diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs
index 47617c36..fadf3556 100644
--- a/Assets/Scripts/Input/InputManager.cs
+++ b/Assets/Scripts/Input/InputManager.cs
@@ -31,7 +31,7 @@ public class InputManager : SingletonMB<InputManager>
UnitState.MoveParam move = new UnitState.MoveParam();
move.isRight = false;
move.key = "a";
- pc.unitState.ChangeState<UnitState.MoveParam>(UnitState.EUnitState.Move, move, true);
+ pc.unitState.ChangeState(UnitState.EUnitState.Move, move);
}
public void OnTurnBack()
diff --git a/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs b/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs
index 3f5d20d4..ab755b64 100644
--- a/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs
+++ b/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs
@@ -6,17 +6,19 @@ using UnityEngine;
public class WaitForActionReachEnd : IEnumerator
{
UnitAnimation m_UnitAnimation;
-
- public WaitForActionReachEnd(UnitAnimation unitAnim)
+ UnitAnimation.ELayer m_Layer;
+
+ public WaitForActionReachEnd(UnitAnimation unitAnim, UnitAnimation.ELayer layer = UnitAnimation.ELayer.Basic)
{
m_UnitAnimation = unitAnim;
- }
+ m_Layer = layer;
+ }
public object Current => null;
public bool MoveNext()
{
- var stateInfo = m_UnitAnimation.stateInfo;
+ var stateInfo = m_UnitAnimation.layers[(int)m_Layer].stateInfo;
float normalTime = stateInfo.normalizedTime;
LogHelper.Log(stateInfo.loop.ToString());
return normalTime < 1f;
diff --git a/Assets/Scripts/Unit/Action/WaitForLanding.cs b/Assets/Scripts/Unit/Action/WaitForLanding.cs
new file mode 100644
index 00000000..5c9736ac
--- /dev/null
+++ b/Assets/Scripts/Unit/Action/WaitForLanding.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class WaitForLanding : IEnumerator
+{
+ UnitController controller;
+
+ public WaitForLanding(UnitController controller)
+ {
+ this.controller = controller;
+ }
+
+ public object Current => null;
+
+ public bool MoveNext()
+ {
+ return controller.isInAir;
+ }
+
+ public void Reset()
+ {
+ }
+}
diff --git a/Assets/Scripts/Unit/TimelineEvent.cs.meta b/Assets/Scripts/Unit/Action/WaitForLanding.cs.meta
index 50d16ded..5098bc64 100644
--- a/Assets/Scripts/Unit/TimelineEvent.cs.meta
+++ b/Assets/Scripts/Unit/Action/WaitForLanding.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 9991268d8dcef1f43bcab1e7a31f6511
+guid: a8352853e3875584bb29bdcff4d9a586
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs b/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs
new file mode 100644
index 00000000..82f3e792
--- /dev/null
+++ b/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class WaitForTransitionDone : IEnumerator
+{
+ UnitAnimation m_UnitAnimation;
+
+ public WaitForTransitionDone(UnitAnimation unitAnim)
+ {
+ m_UnitAnimation = unitAnim;
+ }
+
+ public object Current => null;
+
+ public bool MoveNext()
+ {
+ return m_UnitAnimation.isInTransition;
+ }
+
+ public void Reset()
+ {
+ }
+}
diff --git a/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs.meta b/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs.meta
new file mode 100644
index 00000000..54f35f87
--- /dev/null
+++ b/Assets/Scripts/Unit/Action/WaitForTransitionDone.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1729935affb1cc14c839545a43360dcb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs
index f1204a50..9c880670 100644
--- a/Assets/Scripts/Unit/AnimationData.cs
+++ b/Assets/Scripts/Unit/AnimationData.cs
@@ -6,7 +6,7 @@ using UnityEngine;
using UnityEditor;
#endif
-// 某个动画的数据,包括帧事件、碰撞盒
+// 某个动画的数据,包括帧事件、碰撞盒、速度曲线
[CreateAssetMenu(fileName = "Animation Data")]
public class AnimationData : ScriptableObject
{
@@ -20,7 +20,10 @@ public class AnimationData : ScriptableObject
public List<ColliderData> throwBoxes;
public List<ColliderData> blockBoxes;
public List<ColliderData> defendBoxes;
-
+
+ // 对应的进度的播放速度,默认是1
+ public AnimationCurve curve;
+
public int GetBoxesCount()
{
int hurt = hurtBoxes != null ? hurtBoxes.Count : 0;
diff --git a/Assets/Scripts/Unit/Component/UnitAnimation.cs b/Assets/Scripts/Unit/Component/UnitAnimation.cs
index de3d4cce..5ef7b7a1 100644
--- a/Assets/Scripts/Unit/Component/UnitAnimation.cs
+++ b/Assets/Scripts/Unit/Component/UnitAnimation.cs
@@ -2,88 +2,179 @@
using System.Collections.Generic;
using UnityEngine;
-// 控制动画播放,执行帧事件
+public class AnimatorLayerInfo
+{
+ public UnitAnimation.ELayer layer;
+
+ public int layerIndex { get { return (int)layer; } }
+
+ private Animator m_Animator;
+
+ public AnimationData animationData;
+ private AnimationData m_AnimationData;
+
+ // 当前在播放的动作
+ // 如果处于transition中,动作不变,切换完成后才会到下一个动作
+ public AnimatorStateInfo stateInfo
+ {
+ get
+ {
+ return m_Animator.GetCurrentAnimatorStateInfo(layerIndex);
+ }
+ }
+
+ // 当前正在播放和融合的片段信息
+ public AnimatorClipInfo[] clipInfo
+ {
+ get
+ {
+ return m_Animator.GetCurrentAnimatorClipInfo(layerIndex);
+ }
+ }
+
+ public int stateHash
+ {
+ get
+ {
+ return stateInfo.shortNameHash;
+ }
+ }
+
+ public float playbackTimeInSeconds
+ {
+ get
+ {
+ return stateInfo.normalizedTime * stateInfo.length;
+ }
+ }
+
+ public float playbackNomralizedTime
+ {
+ get
+ {
+ return stateInfo.normalizedTime;
+ }
+ }
+
+ public int pendingStateHash;
+
+ public AnimatorLayerInfo(Animator animator, UnitAnimation.ELayer layer)
+ {
+ this.m_Animator = animator;
+ this.layer = layer;
+ }
+
+}
+
+// 控制动画播放、执行动作timeline(包括执行事件和碰撞盒)
+// 每个layer同时只会有一个动画在播放,在执行transition时,current animation依然是
+// 这个动作,只有完全过渡完成后才会切到下一个动作
+// 当前是什么动作以ainmator的GetCurrentAnimatorStateInfo为准
[DisallowMultipleComponent]
public class UnitAnimation : UnitComponent
{
- // 动画
- public enum EAnimState
- {
- Idle,
- Move,
- Jump,
- Hit,
- Attack,
- Rise,
- Stinger,
- Turn,
- }
-
public enum ELayer
{
- Basic = 0,
- Attack = 1,
+ Basic = 0,
+ Attack,
+
+ Count,
+ }
+
+ // 动作名,和animator里的state对应
+ public enum EAnimState
+ {
+ // layer 0
+ Idle = 0,
+ Move,
+ Jump,
+ Hit,
+ Attack,
+ Rise,
+ Stinger,
+ Turn,
+ Landing,
+ }
+
+ // 切换动画
+ public enum ETrigger
+ {
+ ToIdle,
+ ToMove,
+ ToAttack,
}
public Animator animator { get { return m_Animator; } }
private Animator m_Animator;
- private TimelineEvent m_Timeline;
- private UnitActionData m_ActionData;
+ private UnitTimeline m_Timeline;
- public AnimatorStateInfo stateInfo
- {
- get
- {
- return m_Animator.GetCurrentAnimatorStateInfo(0);
- }
- }
+ private UnitActionData m_ActionData;
- public EAnimState curState { get { return m_CurState; } }
- private EAnimState m_CurState;
+ public AnimatorLayerInfo[] layers { get { return m_LayerInfo; } }
+ private AnimatorLayerInfo[] m_LayerInfo = new AnimatorLayerInfo[(int)ELayer.Count];
- public float playbackTime { get { return m_PlaybackTime; } }
- private float m_PlaybackTime;
+ public bool isInTransition
+ {
+ get
+ {
+ return m_Animator.IsInTransition(0);
+ }
+ }
+ //public EAnimState curState { get { return m_CurState; } }
+ //private EAnimState m_CurState;
public override void Initialize()
{
base.Initialize();
- m_Timeline = this.m_Owner.unitObj.GetOrAddComponent<TimelineEvent>();
- m_Animator = this.m_Owner.unitObj.GetComponent<Animator>();
+ m_Timeline = this.m_Owner.unitObj.GetOrAddComponent<UnitTimeline>();
+ m_Animator = this.m_Owner.unitObj.GetComponent<Animator>();
+
+ m_Animator.speed = 0;
+
+ m_LayerInfo[0] = new AnimatorLayerInfo(m_Animator, ELayer.Basic);
+ m_LayerInfo[1] = new AnimatorLayerInfo(m_Animator, ELayer.Attack);
- if(m_Animator == null)
+ if (m_Animator == null)
{
LogHelper.LogError("没有挂Animator组件");
}
}
- public string GetTrigger(EAnimState state)
- {
- return "To" + state.ToString();
- }
-
- public void Play(EAnimState state)
- {
- m_CurState = state;
- m_Animator.SetTrigger(GetTrigger(state));
- m_Animator.speed = 0;
- m_PlaybackTime = 0;
- m_Owner.unitRootMotion.Reset();
- }
-
public override void OnUpdate()
{
base.OnUpdate();
- m_PlaybackTime += Time.deltaTime;
+ UpdateAnimation();
+ UpdateRootMotion();
+ }
- m_Animator.speed = 1;
- m_Animator.Update(Time.deltaTime);
- m_Animator.speed = 0;
+ void UpdateAnimation()
+ {
+ m_Animator.speed = 1;
+ m_Animator.Update(Time.deltaTime);
+ m_Animator.speed = 0;
+ }
- m_Owner.unitRootMotion.UpdateRootMotion();
+ void UpdateRootMotion()
+ {
+ m_Owner.unitRootMotion.UpdateRootMotion();
+ }
- }
+ public void AnimIdle()
+ {
+ m_Animator.SetTrigger(ETrigger.ToIdle.ToString());
+ }
+
+ public void AnimMove()
+ {
+ m_Animator.SetTrigger(ETrigger.ToMove.ToString());
+ }
+
+ public void AnimAttack()
+ {
+ m_Animator.SetTrigger(ETrigger.ToAttack.ToString());
+ }
}
diff --git a/Assets/Scripts/Unit/Component/UnitState.cs b/Assets/Scripts/Unit/Component/UnitState.cs
index 587c2f33..4a57ad6d 100644
--- a/Assets/Scripts/Unit/Component/UnitState.cs
+++ b/Assets/Scripts/Unit/Component/UnitState.cs
@@ -11,34 +11,31 @@ public class UnitState : UnitComponent
public enum EUnitState
{
Idle ,
- Move ,
- Spawn ,
- Die ,
- Dead ,
- Skill ,
- //
- HitAir ,
- HitAirHit ,
- Knockdown ,
- //
- HitGuard ,
- //
- Walk ,
- //
- Rise ,
- //
- Jump ,
- // 转身
- Turn ,
+ Move ,
+ Spawn ,
+ Die ,
+ Dead ,
+ Skill ,
+ //
+ HitAir ,
+ HitAirHit ,
+ Knockdown ,
+ //
+ HitGuard ,
+ //
+ Walk ,
+ //
+ Rise ,
+ //
+ Jump ,
+ // 转身
+ Turn ,
+ Landing , // 从空中降落
}
[SerializeField] private EUnitState m_State;
public EUnitState CurrentState { get { return m_State; } }
- private delegate void ExitStateHandler(EUnitState nextState);
-
- private Dictionary<EUnitState, ExitStateHandler> m_ExitStateHandlerDic = new Dictionary<EUnitState, ExitStateHandler>();
-
public override void Initialize()
{
base.Initialize();
@@ -68,6 +65,8 @@ public class UnitState : UnitComponent
EUnitState nextState;
}
+ public struct LandingParam { }
+
#endregion
void InitState()
@@ -110,8 +109,12 @@ public class UnitState : UnitComponent
IEnumerator Idle(IdleParam param)
{
- m_Owner.unitAnimation.Play(UnitAnimation.EAnimState.Idle);
- yield return null;
+ if(m_Owner.isInAir)
+ {
+
+ }
+ m_Owner.unitAnimation.AnimIdle();
+ yield return null;
}
void OnIdleExit(EUnitState nextState)
@@ -134,9 +137,9 @@ public class UnitState : UnitComponent
// m_Owner.transform.rotation = Quaternion.Euler(0, 180, 0);
m_Owner.transform.rotation = Quaternion.Euler(0, param.isRight ? 0 : 180, 0);
}
- if(Input.GetKey(param.key))
- m_Owner.unitAnimation.Play(UnitAnimation.EAnimState.Move);
- while (Input.GetKey(param.key))
+ //if (Input.GetKey(param.key))
+ m_Owner.unitAnimation.AnimMove();
+ while (Input.GetKey(param.key))
{
yield return null;
}
@@ -145,7 +148,7 @@ public class UnitState : UnitComponent
void OnMoveExit(EUnitState nextState)
{
-
+ //m_Owner.unitAnimation.animator.ResetTrigger("ToMove");
}
#endregion
@@ -154,8 +157,9 @@ public class UnitState : UnitComponent
IEnumerator Skill(SkillParam param)
{
- m_Owner.unitAnimation.Play(UnitAnimation.EAnimState.Attack);
- yield return new WaitForActionReachEnd(m_Owner.unitAnimation);
+ m_Owner.unitAnimation.AnimAttack();
+ yield return new WaitForTransitionDone(m_Owner.unitAnimation);
+ yield return new WaitForActionReachEnd(m_Owner.unitAnimation);
ChangeState(EUnitState.Idle, new IdleParam());
}
@@ -170,7 +174,6 @@ public class UnitState : UnitComponent
IEnumerator Jump(JumpParam param)
{
- m_Owner.unitAnimation.Play(UnitAnimation.EAnimState.Jump);
yield return new WaitForActionReachEnd(m_Owner.unitAnimation);
ChangeState<IdleParam>(EUnitState.Idle);
}
@@ -180,6 +183,23 @@ public class UnitState : UnitComponent
}
- #endregion
+ #endregion
+
+ #region Landing
+
+ IEnumerator Landing(LandingParam param)
+ {
+ yield return new WaitForLanding(m_Owner);
+ Vector3 pos = m_Owner.transform.position;
+ pos.y = 0;
+ m_Owner.transform.position = pos;
+ ChangeState<IdleParam>(EUnitState.Idle);
+ }
+
+ void OnLandingExit(EUnitState next)
+ {
+ }
+
+ #endregion
}
diff --git a/Assets/Scripts/Unit/Controller/PCController.cs b/Assets/Scripts/Unit/Controller/PCController.cs
index ed472cdb..4904d60e 100644
--- a/Assets/Scripts/Unit/Controller/PCController.cs
+++ b/Assets/Scripts/Unit/Controller/PCController.cs
@@ -17,11 +17,8 @@ public class PCController : UnitController
{
base.Initialize(obj);
-
-
}
-
public override void Update()
{
base.Update();
diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs
index 8cea1331..1863ad69 100644
--- a/Assets/Scripts/Unit/Controller/UnitController.cs
+++ b/Assets/Scripts/Unit/Controller/UnitController.cs
@@ -26,6 +26,22 @@ public class UnitController : MonoBehaviour
}
}
+ public virtual bool isOnGround
+ {
+ get
+ {
+ return transform.position.y <= 0f;
+ }
+ }
+
+ public bool isInAir
+ {
+ get
+ {
+ return !isOnGround;
+ }
+ }
+
public virtual void Initialize( GameObject obj )
{
unitObj = obj;
diff --git a/Assets/Scripts/Unit/Events/AnimationEventBase.cs b/Assets/Scripts/Unit/Events/AnimationEventBase.cs
index 42fe6460..613eff27 100644
--- a/Assets/Scripts/Unit/Events/AnimationEventBase.cs
+++ b/Assets/Scripts/Unit/Events/AnimationEventBase.cs
@@ -7,7 +7,7 @@ public abstract class AnimationEventBase : ScriptableObject
{
public int startFrame;
- public abstract TimelineEvent.EEventType type { get; }
+ public abstract UnitTimeline.EEventType type { get; }
public string fullName
{
diff --git a/Assets/Scripts/Unit/Events/EventEffect.cs b/Assets/Scripts/Unit/Events/EventEffect.cs
index 9aaf8d9f..61a4a7e3 100644
--- a/Assets/Scripts/Unit/Events/EventEffect.cs
+++ b/Assets/Scripts/Unit/Events/EventEffect.cs
@@ -4,7 +4,7 @@ using UnityEngine;
public class EventEffect : AnimationEventBase
{
- public override TimelineEvent.EEventType type { get { return TimelineEvent.EEventType.EventEffect; } }
+ public override UnitTimeline.EEventType type { get { return UnitTimeline.EEventType.EventEffect; } }
public override string shortName { get { return "E"; } }
[Tooltip("Effect path")]
diff --git a/Assets/Scripts/Unit/Events/EventProjectile.cs b/Assets/Scripts/Unit/Events/EventProjectile.cs
index 526628e8..032c93bb 100644
--- a/Assets/Scripts/Unit/Events/EventProjectile.cs
+++ b/Assets/Scripts/Unit/Events/EventProjectile.cs
@@ -4,7 +4,7 @@ using UnityEngine;
public class EventProjectile : AnimationEventBase
{
- public override TimelineEvent.EEventType type { get { return TimelineEvent.EEventType.EventProjectile; } }
+ public override UnitTimeline.EEventType type { get { return UnitTimeline.EEventType.EventProjectile; } }
public override string shortName { get { return "P"; } }
diff --git a/Assets/Scripts/Unit/UnitRootMotion.cs b/Assets/Scripts/Unit/UnitRootMotion.cs
index 542b08fd..58ae814e 100644
--- a/Assets/Scripts/Unit/UnitRootMotion.cs
+++ b/Assets/Scripts/Unit/UnitRootMotion.cs
@@ -20,12 +20,13 @@ public class UnitRootMotion : UnitComponent
base.Initialize();
}
+#if false // 用自定义root motion
+
public void Reset()
{
m_PrevNormalTime = 0;
}
-#if false // 用自定义root motion
public override void OnUpdate()
{
base.OnUpdate();
@@ -62,7 +63,7 @@ public class UnitRootMotion : UnitComponent
#else
- public override void OnUpdate()
+ public override void OnUpdate()
{
base.OnUpdate();
}
diff --git a/Assets/Scripts/Unit/TimelineEvent.cs b/Assets/Scripts/Unit/UnitTimeline.cs
index 6a69934b..ba8e652a 100644
--- a/Assets/Scripts/Unit/TimelineEvent.cs
+++ b/Assets/Scripts/Unit/UnitTimeline.cs
@@ -7,9 +7,9 @@ using UnityEngine;
using UnityEditor;
#endif
-// 动画帧事件
+// 处理动画帧事件和碰撞盒
[DisallowMultipleComponent]
-public partial class TimelineEvent: MonoBehaviour
+public partial class UnitTimeline : MonoBehaviour
{
public enum EEventType
{
@@ -23,7 +23,7 @@ public partial class TimelineEvent: MonoBehaviour
EventMesh_Gloss, // 角色泛光
EventEnv_Dark,
- EventEnv_Exposure,
+ EventEnv_Exposure,
EventUI_Drift, //
EventUI_Blur, //
@@ -50,9 +50,9 @@ public partial class TimelineEvent: MonoBehaviour
if (animData == null)
return;
int frame = (int)animFrame;
- if(frame != m_PrevFrame)
+ if (frame != m_PrevFrame)
{
- for(int i = m_PrevFrame + 1; i <= frame; i++)
+ for (int i = m_PrevFrame + 1; i <= frame; i++)
{
List<int> framesHasEvent = animData.GetAnimationEventFrameIndices();
if (framesHasEvent.Contains(i))
@@ -71,13 +71,13 @@ public partial class TimelineEvent: MonoBehaviour
{
if (events == null || events.Count == 0)
return;
- foreach(var e in events)
+ foreach (var e in events)
{
string name = e.type.ToString();
MethodInfo method = GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(AnimationEventBase) }, null);
- if(method != null)
+ if (method != null)
{
- object[] param = new object[] {e };
+ object[] param = new object[] { e };
method.Invoke(this, param);
}
}
@@ -93,7 +93,7 @@ public partial class TimelineEvent: MonoBehaviour
string path = effect.effectPath;
#if UNITY_EDITOR
GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject;
- if(prefab != null)
+ if (prefab != null)
{
GameObject root = new GameObject();
diff --git a/Assets/Scripts/Unit/UnitTimeline.cs.meta b/Assets/Scripts/Unit/UnitTimeline.cs.meta
new file mode 100644
index 00000000..eacf2ed1
--- /dev/null
+++ b/Assets/Scripts/Unit/UnitTimeline.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7bb2f04adc210b04dad020a77628fe79
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: