diff options
author | chai <215380520@qq.com> | 2022-11-16 20:57:37 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2022-11-16 20:57:37 +0800 |
commit | 7dd988e2dc0583633781462f3836e6f97b7c682b (patch) | |
tree | 1d72c23aee44f1fd6de305e110f709478f4b2c66 | |
parent | e5b23c103b9c98975ad0d003937d3616478d0177 (diff) |
* playback speed
39 files changed, 517 insertions, 209 deletions
diff --git a/Documents/_TODO.xlsx b/Documents/_TODO.xlsx Binary files differindex d8f0440a..c3bfba71 100644 --- a/Documents/_TODO.xlsx +++ b/Documents/_TODO.xlsx diff --git a/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity b/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity index aa010edf..3250e56c 100644 --- a/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity +++ b/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity @@ -112,6 +112,135 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &65697947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 65697951} + - component: {fileID: 65697950} + - component: {fileID: 65697949} + - component: {fileID: 65697948} + m_Layer: 5 + m_Name: UICanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &65697948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65697947} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &65697949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65697947} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &65697950 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65697947} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &65697951 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65697947} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 143417589} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &143417588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 143417589} + m_Layer: 0 + m_Name: UIRoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &143417589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 143417588} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 65697951} + m_Father: {fileID: 0} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &152403860 GameObject: m_ObjectHideFlags: 0 @@ -411,7 +540,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &533536616 GameObject: @@ -987,7 +1116,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 68da209687f0dcc49967a423b26c204c, type: 3} m_Name: m_EditorClassIdentifier: - offset: {x: 0, y: 1.2, z: 0} + offset: {x: 0, y: 2, z: 0} z: -7.5 region: l: -0.1 @@ -1716,7 +1845,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2137539566 GameObject: diff --git a/Erika/Assets/Bundle/Unit/Colliders/ColliderBox.prefab b/Erika/Assets/Bundle/Unit/Colliders/ColliderBox.prefab index e6ff38a3..be790ace 100644 --- a/Erika/Assets/Bundle/Unit/Colliders/ColliderBox.prefab +++ b/Erika/Assets/Bundle/Unit/Colliders/ColliderBox.prefab @@ -74,5 +74,44 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: b6e50b8c49a6ee144830503d34593230, type: 3} m_Name: m_EditorClassIdentifier: - colliderType: 0 - owner: {fileID: 0} + m_ColliderBox: + uid: 0 + type: 0 + pivot: 0 + nobreak: 0 + invisible: 0 + multiHit: 0 + hitResponse: 0 + hitBack: {x: 0, y: 0, z: 0} + hitCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + freezeGlobal: 0 + freezeFramesSelf: 0 + freezeFramesOther: 0 + sparkPath: + sparkAnchor: 1 + sparkOffset: {x: 0, y: 0, z: 0} + sparkScale: {x: 1, y: 1, z: 1} + multiSparks: 0 + spark2Path: + spark2Anchor: 1 + spark2Offset: {x: 0, y: 0, z: 0} + spark3Path: + spark3Anchor: 1 + spark3Offset: {x: 0, y: 0, z: 0} + selfEffect: 0 + otherEffect: 0 + zoomCamera: 0 + shakeScreen: 0 + shakeOffset: {x: 0, y: 0} + shakeStrength: 0 + colorDrift: 0 + blur: 0 + soundPath: + useGravity: 0 + multiple: 0 + m_Owner: {fileID: 0} diff --git a/Erika/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_4.asset b/Erika/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_4.asset index 30e4c31f..27b8a497 100644 --- a/Erika/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_4.asset +++ b/Erika/Assets/Bundle/Unit/PC/Erika/AnimationData/Air_Combo03_Z0_4.asset @@ -221,56 +221,7 @@ MonoBehaviour: active: 1 position: {x: 1.5449152, y: 1.4012014, z: 0} size: {x: 2.58, y: 1.14, z: 1} - defendBoxes: - - collider: - uid: -2005854031 - type: 4 - pivot: 1 - nobreak: 0 - invisible: 0 - multiHit: 0 - hitResponse: 0 - hitBack: {x: 0, y: 0, z: 0} - hitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - freezeGlobal: 0 - freezeFramesSelf: 0 - freezeFramesOther: 0 - sparkPath: - sparkAnchor: 1 - sparkOffset: {x: 0, y: 0, z: 0} - sparkScale: {x: 1, y: 1, z: 1} - multiSparks: 0 - spark2Path: - spark2Anchor: 1 - spark2Offset: {x: 0, y: 0, z: 0} - spark3Path: - spark3Anchor: 1 - spark3Offset: {x: 0, y: 0, z: 0} - selfEffect: 0 - otherEffect: 0 - zoomCamera: 0 - shakeScreen: 0 - shakeOffset: {x: 0, y: 0} - shakeStrength: 0 - colorDrift: 0 - blur: 0 - soundPath: - useGravity: 0 - multiple: 0 - frames: - - frame: 6 - active: 1 - position: {x: 0, y: 0, z: 0} - size: {x: 0.5, y: 1, z: 1} - - frame: 38 - active: 1 - position: {x: 0, y: 0, z: 0} - size: {x: 0.5, y: 1, z: 1} + defendBoxes: [] overrideRootMotion: 0 rootMotionOverrideData: positions: [] diff --git a/Erika/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller b/Erika/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller index 31f994ec..a0438ed2 100644 --- a/Erika/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller +++ b/Erika/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller @@ -9,180 +9,162 @@ AnimatorController: m_Name: Erika_AnimatorController serializedVersion: 5 m_AnimatorParameters: - - m_Name: IdleStatus - m_Type: 1 - m_DefaultFloat: 0.4 - m_DefaultInt: 0 - m_DefaultBool: 0 - m_Controller: {fileID: 9100000} - - m_Name: PlaybackSpeed0 - m_Type: 1 - m_DefaultFloat: 1 - m_DefaultInt: 0 - m_DefaultBool: 0 - m_Controller: {fileID: 9100000} - - m_Name: PlaybackSpeed1 - m_Type: 1 - m_DefaultFloat: 1 - m_DefaultInt: 0 - m_DefaultBool: 0 - m_Controller: {fileID: 9100000} - m_Name: ToIdle m_Type: 9 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: ToLanding m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToAirDash m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToLandingGround m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToHeavyHit m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToGetUp 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: ToAttack0 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToAttack1 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToAttack2 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToAttack3 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToAttack4 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToAttack5 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToQTE m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase0 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase1 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase2 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase3 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase4 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase5 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase6 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase7 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase8 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} - m_Name: ToPhase9 m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 9100000} + m_Controller: {fileID: 0} m_AnimatorLayers: - serializedVersion: 5 m_Name: Basic @@ -547,9 +529,9 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.05 + m_TransitionDuration: 0.1 m_TransitionOffset: 0 - m_ExitTime: 0.75 + m_ExitTime: 0.865238 m_HasExitTime: 0 m_HasFixedDuration: 0 m_InterruptionSource: 0 @@ -612,7 +594,10 @@ AnimatorStateTransition: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: - m_Conditions: [] + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: ToAttack + m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: 1102008300147848362} m_Solo: 0 @@ -691,9 +676,9 @@ AnimatorStateTransition: m_Mute: 0 m_IsExit: 0 serializedVersion: 3 - m_TransitionDuration: 0.1 + m_TransitionDuration: 0.02 m_TransitionOffset: 0 - m_ExitTime: 0.75 + m_ExitTime: 0.69857144 m_HasExitTime: 0 m_HasFixedDuration: 0 m_InterruptionSource: 0 @@ -2883,13 +2868,13 @@ AnimatorStateMachine: m_Position: {x: -948, y: -996, z: 0} - serializedVersion: 1 m_State: {fileID: 1102615469568996994} - m_Position: {x: -372, y: -1056, z: 0} + m_Position: {x: -360, y: -1056, z: 0} - serializedVersion: 1 m_State: {fileID: 1102129912193280218} - m_Position: {x: -360, y: -972, z: 0} + m_Position: {x: -360, y: -960, z: 0} - serializedVersion: 1 m_State: {fileID: 1102416046689606334} - m_Position: {x: -360, y: -888, z: 0} + m_Position: {x: -360, y: -864, z: 0} - serializedVersion: 1 m_State: {fileID: 1102008300147848362} m_Position: {x: -900, y: -756, z: 0} diff --git a/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs b/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs index ebcb457e..e75bfa30 100644 --- a/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs +++ b/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs @@ -2,18 +2,24 @@ using System.Collections.Generic; using UnityEngine; +/// <summary> +/// 鼠标键盘输入 +/// </summary> public class InputKeyboardMouse : MonoBehaviour { void Update() { - if (Input.GetButtonDown("Fire1")) + float horizontal = Input.GetAxisRaw("Horizontal"); + bool bMove = horizontal != 0; + if (bMove) { - PCController.instance.CommandMove(); + EUnitDirection dir = horizontal == 1 ? EUnitDirection.Right : EUnitDirection.Left; + InputManager.Instance.InputTurn(dir); + InputManager.Instance.InputMove(dir); } - if (Input.GetButtonDown("Fire2")) + else { PCController.instance.CommandIdle(); } - } } diff --git a/Erika/Assets/Scripts/Input/InputManager.cs b/Erika/Assets/Scripts/Input/InputManager.cs index 5403d779..c3b8096a 100644 --- a/Erika/Assets/Scripts/Input/InputManager.cs +++ b/Erika/Assets/Scripts/Input/InputManager.cs @@ -7,9 +7,14 @@ using UnityEngine; /// </summary>
public class InputManager : SingletonMB<InputManager>
{
+ public void InputTurn(EUnitDirection dir)
+ {
+ PCController.instance.CommandTurn(dir);
+ }
- public void InputMove()
+ public void InputMove(EUnitDirection dir)
{
+ PCController.instance.CommandMove(dir);
}
public void InputSkill()
diff --git a/Erika/Assets/Scripts/Test2/TestErikaRobot.cs b/Erika/Assets/Scripts/Test2/TestErikaRobot.cs index 0be3b380..93c2bfaa 100644 --- a/Erika/Assets/Scripts/Test2/TestErikaRobot.cs +++ b/Erika/Assets/Scripts/Test2/TestErikaRobot.cs @@ -10,7 +10,8 @@ public class TestErikaRobot : SingletonMB<TestErikaRobot> void Start() { - UnitManager.Instance.SpawnUnit(profile, Vector3.zero, Quaternion.identity, Vector3.one); + UnitController player = UnitManager.Instance.SpawnUnit(profile, Vector3.zero, Quaternion.identity, Vector3.one); + UnitManager.Instance.SetPlayerCharacter(player as PCController); } }
\ No newline at end of file diff --git a/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs b/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs index 394601e2..a17b39be 100644 --- a/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs +++ b/Erika/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs @@ -21,7 +21,7 @@ public class WaitForActionReachEnd : IEnumerator public bool MoveNext() { - return m_UnitAnimation.playbackNormalizedTime < 1f; + return m_UnitAnimation.playbackClampedNormalizedTime < 1f; } public void Reset() diff --git a/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs b/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs index 170a1202..0b258496 100644 --- a/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs +++ b/Erika/Assets/Scripts/Unit/AfterImage/AfterImageAvatar.cs @@ -30,7 +30,7 @@ public class AfterImageAvatar : MonoBehaviour transform.position = prototype.transform.position; animator.runtimeAnimatorController = prototype.unitMotion.animator.runtimeAnimatorController; - animator.Play(prototype.unitMotion.stateHash, 0, prototype.unitMotion.playbackNormalizedTime); + animator.Play(prototype.unitMotion.stateHash, 0, prototype.unitMotion.playbackClampedNormalizedTime); animator.speed = 0.02f;
animator.Update(1 / 60f);
diff --git a/Erika/Assets/Scripts/Unit/AnimationData.cs b/Erika/Assets/Scripts/Unit/AnimationData.cs index 2d324d49..dab3d55c 100644 --- a/Erika/Assets/Scripts/Unit/AnimationData.cs +++ b/Erika/Assets/Scripts/Unit/AnimationData.cs @@ -9,14 +9,15 @@ using UnityEditor; // 不要修改枚举的顺序,只能在后面新加,不能删除
public enum EAnimationToogle
{
- Combo = 0, // 连击
+ Combo = 0, // 连击,是否可以按键触发combo
SuperArmor = 1, // 霸体
Break = 2, // 打断
- SkillLink = 3, // 技能连招
- Link = 4, // 普攻连招
+ SkillLink = 3, // 技能连招,开启后允许按键触发combo
+ ComboLink = 4, // 普攻连招,开启后按键触发combo
MoveLink = 5, // 接移动
+ ChangeAble = 6, // 是否可以切换动作,从combo池中拿出下一个动作
}
[Serializable]
diff --git a/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs b/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs index ecc4daa4..bec49d66 100644 --- a/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs +++ b/Erika/Assets/Scripts/Unit/AnimatorLayerInfo.cs @@ -106,7 +106,7 @@ public class AnimatorLayerInfo { get { - return playbackNormalizedTime * clipInfo.clip.length; + return playbackClampedNormalizedTime * clipInfo.clip.length; } } @@ -121,7 +121,7 @@ public class AnimatorLayerInfo } // 播放进度百分比,[0-1],是逻辑上的,如果动画不是loop,那么播放完后normalizedTime是1 - public float playbackNormalizedTime + public float playbackClampedNormalizedTime { get { @@ -209,7 +209,7 @@ public class AnimatorLayerInfo { if (m_AnimationData == null) return false; - return m_AnimationData.IsToggleOpen(toggle, playbackNormalizedTime); + return m_AnimationData.IsToggleOpen(toggle, playbackClampedNormalizedTime); } public void OnUpdate() @@ -220,7 +220,7 @@ public class AnimatorLayerInfo // 播放速度控制 if (applySpeedCurve && animationData != null && animationData.speedCurve != null) { - playbackSpeed = animationData.speedCurve.Evaluate(playbackNormalizedTime); + playbackSpeed = animationData.speedCurve.Evaluate(playbackClampedNormalizedTime); } } diff --git a/Erika/Assets/Scripts/Unit/AnimatorState.cs b/Erika/Assets/Scripts/Unit/AnimatorState.cs index 62d59239..8bb8a002 100644 --- a/Erika/Assets/Scripts/Unit/AnimatorState.cs +++ b/Erika/Assets/Scripts/Unit/AnimatorState.cs @@ -8,8 +8,6 @@ using UnityEngine; /// </summary> public enum EAnimatorState { - None = 0, - // locomotion __Localmotion = 1, Idle, diff --git a/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs index 2af3442a..8593980c 100644 --- a/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs +++ b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs @@ -25,7 +25,7 @@ public class CollisionHandler : MonoBehaviour this.m_Owner = owner; this.transform.SetParent(owner.transform); - this.transform.localPosition = Vector3.zero; + this.transform.ResetTransformation(); m_Collider = GetComponent<Collider>(); } @@ -43,7 +43,7 @@ public class CollisionHandler : MonoBehaviour { BoxCollider bc = collider as BoxCollider; Vector3 center = info.position; - Vector3 localPosition = m_Owner.faceRotation * center; + Vector3 localPosition = center;// m_Owner.faceRotation * center; switch(info.collider.pivot) { case ColliderBox.Pivot.MiddleBottom: diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs index 8a69314d..a19512ec 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs @@ -32,6 +32,10 @@ public class UnitMotion : UnitComponent // 角色的所有动作数据,包括(动画、事件、RM) public UnitMotionData m_MotionData; + private TimelineEventProxy m_TimelineEventProxy; + + #region 动作状态 + // 当前动作 protected int m_currentMotionIDID; public int currentMotionID @@ -93,7 +97,8 @@ public class UnitMotion : UnitComponent } } - public float playbackNormalizedTime + // 归一化的动画播放时间 + public float playbackClampedNormalizedTime { get { @@ -105,12 +110,21 @@ public class UnitMotion : UnitComponent } } - public AnimatorStateInfo stateInfo + // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速 + public float playbackClampedTimeInSeconds + { + get + { + return playbackClampedNormalizedTime * animationClip.length; + } + } + + public AnimatorStateInfo stateInfo { get { AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(0); - if (isInTransition) // 过渡中的动作认为当前动作是下一个动作 + if (isInTransition) // 过渡中的动作认为当前动作是下一个动作(为了保证及时性,和m_CUrrentMotionID保证一致) { stateInfo = m_Animator.GetNextAnimatorStateInfo(0); } @@ -124,48 +138,53 @@ public class UnitMotion : UnitComponent { return stateInfo.shortNameHash; } - } + } - // 并非准确的播放时间,只是逻辑时间,因为动画会加速减速 - public float playbackTimeInSeconds - { - get - { - return playbackNormalizedTime * animationClip.length; - } - } + public float playbackSpeed + { + get + { + //return m_Animator.GetFloat("PlaybackSpeed" + 0); + return m_Animator.speed; + } + set + { + float v = Mathf.Clamp(value, 0, 10); + //m_Animator.SetFloat("PlaybackSpeed" + 0, v); + m_Animator.speed = v; + } + } - private TimelineEventProxy m_TimelineEventProxy; + /// <summary> + /// 当前动作是否是motionId + /// </summary> + /// <param name="motionId"></param> + /// <returns></returns> + public bool IsCurrent(int motionId) + { + if (motionId == 0) + return false; + return m_currentMotionIDID == motionId; + } - public float playbackSpeed - { - get - { - return m_Animator.GetFloat("PlaybackSpeed" + 0); - } - set - { - float v = Mathf.Clamp(value, 0, 10); - m_Animator.SetFloat("PlaybackSpeed" + 0, v); - } - } + #endregion public override void OnUpdate() { base.OnUpdate(); // 执行事件 - m_TimelineEventProxy.ExecuteAnimationEvents(animationData, playbackTimeInSeconds * TimelineEventProxy.FPS); + m_TimelineEventProxy.ExecuteAnimationEvents(animationData, playbackClampedTimeInSeconds * TimelineEventProxy.FPS); // 播放速度控制 if (/*applySpeedCurve && */animationData != null && animationData.speedCurve != null) { - playbackSpeed = animationData.speedCurve.Evaluate(playbackNormalizedTime); + playbackSpeed = animationData.speedCurve.Evaluate(playbackClampedNormalizedTime); } } public bool IsToggleOpen(EAnimationToogle toggle) { - return animationData.IsToggleOpen(toggle, playbackNormalizedTime); + return animationData.IsToggleOpen(toggle, playbackClampedNormalizedTime); } //public override void Initialize() @@ -276,6 +295,21 @@ public class UnitMotion : UnitComponent #region 播放动作,对外屏蔽Animator /// <summary> + /// 重置所有trigger的状态,否则在过渡时切换另一个动作会有问题,导致切换失败 + /// </summary> + private void ClearAllTriggers() + { + var allMotions = m_MotionData.allMotions; + if (allMotions == null || allMotions.Count == 0) + return; + allMotions.ForEach(m => { + if (m.hide) + return; + m_Animator.ResetTrigger("To" + m.animatorState.ToString()); + }); + } + + /// <summary> /// 用trigger跳转动作 /// </summary> /// <param name="animType"></param> @@ -293,6 +327,8 @@ public class UnitMotion : UnitComponent if (!overrideAnim) return; + ClearAllTriggers(); + string trigger = "To" + stateName; m_Animator.SetTrigger(trigger); currentMotionID = motion.uid; @@ -309,6 +345,8 @@ public class UnitMotion : UnitComponent if (!overrideAnim) return; + ClearAllTriggers(); + string trigger = "To" + stateName; m_Animator.SetTrigger(trigger); currentMotionID = motion.uid; diff --git a/Erika/Assets/Scripts/Unit/Components/UnitBody.cs b/Erika/Assets/Scripts/Unit/Components/UnitBody.cs index cc7ac348..e2c01f0e 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitBody.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitBody.cs @@ -4,9 +4,9 @@ using UnityEngine; public class UnitBody : UnitComponent
{
- public override void Initialize()
+ public override void Initialize(object obj = null)
{
- base.Initialize();
+ base.Initialize(obj);
}
public override void OnUpdate()
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs index 1d216a06..b0910c0c 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs @@ -30,9 +30,9 @@ public class UnitCollider : UnitComponent base.OnDestroy(); } - public override void Initialize() + public override void Initialize(object obj = null) { - base.Initialize(); + base.Initialize(obj); showGizmos = true; m_AllColliders.Clear(); @@ -46,7 +46,7 @@ public class UnitCollider : UnitComponent public ColliderInfo[] GetCurrentBoxesInfoByType(ColliderBox.EColliderType type) { AnimationData animData = m_Owner.unitMotion.animationData; - float playbackTime = m_Owner.unitMotion.playbackNormalizedTime * m_Owner.unitMotion.animationClip.length; + float playbackTime = m_Owner.unitMotion.playbackClampedNormalizedTime * m_Owner.unitMotion.animationClip.length; //float playbackTime = layerInfo.playbackRealTimeInSeconds; ColliderInfo[] infos = animData.GetActiveCollidersInfo(type, playbackTime); return infos; @@ -86,20 +86,26 @@ public class UnitCollider : UnitComponent public override void OnUpdate() { + } + + public override void OnFixedUpdate() + { + base.OnFixedUpdate(); + m_ActiveColliders.Clear(); for (int i = (int)ColliderBox.EColliderType.HitBox; i < (int)ColliderBox.EColliderType.End; ++i) { ColliderBox.EColliderType colliderType = (ColliderBox.EColliderType)i; ColliderInfo[] activeColliders = GetCurrentBoxesInfoByType(colliderType); - if(activeColliders == null || activeColliders.Length == 0) + if (activeColliders == null || activeColliders.Length == 0) continue; - for(int j = 0; j < activeColliders.Length; ++j) + for (int j = 0; j < activeColliders.Length; ++j) { ColliderInfo info = activeColliders[j]; m_ActiveColliders.Add(info.uid); CollisionHandler handler = m_AllColliders.Find(s => s.colliderBox.uid == info.uid); - if(handler == null) + if (handler == null) { handler = ResourceManager.Instance.CreateObj<CollisionHandler>(StaticDefine.collider); handler.Initialize(m_Owner, info.collider); @@ -109,10 +115,10 @@ public class UnitCollider : UnitComponent } } - for(int i = m_AllColliders.Count - 1; i >= 0; --i) + for (int i = m_AllColliders.Count - 1; i >= 0; --i) { CollisionHandler handler = m_AllColliders[i]; - if(!m_ActiveColliders.Contains(handler.colliderBox.uid)) + if (!m_ActiveColliders.Contains(handler.colliderBox.uid)) { m_AllColliders.RemoveAt(i); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs b/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs index 948beba4..414a13bd 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitComponent.cs @@ -27,12 +27,7 @@ public class UnitComponent : MonoBehaviour { } - public virtual void Initialize() - { - m_Owner = GetComponent<UnitController>(); - } - - public virtual void Initialize(object param)
+ public virtual void Initialize(object param = null)
{
m_Owner = GetComponent<UnitController>(); } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitLensEffect.cs b/Erika/Assets/Scripts/Unit/Components/UnitLensEffect.cs index 0511b1bb..13ccc08e 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitLensEffect.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitLensEffect.cs @@ -24,9 +24,9 @@ public partial class UnitLensEffect : UnitComponent m_CommandBufferPool = new ObjectPool<CommandBuffer>(null, null);
}
- public override void Initialize()
+ public override void Initialize(object obj = null)
{
- base.Initialize();
+ base.Initialize(obj);
renderers = new List<RendererProxy>();
m_Effects = new List<LensEffectBase>(); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitPostEffect.cs b/Erika/Assets/Scripts/Unit/Components/UnitPostEffect.cs index ad98ff6a..872f2df1 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitPostEffect.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitPostEffect.cs @@ -5,9 +5,9 @@ using UnityEngine; public class UnitPostEffect : UnitComponent { - public override void Initialize() + public override void Initialize(object obj) { - base.Initialize(); + base.Initialize(obj); } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitPreprocessing.cs b/Erika/Assets/Scripts/Unit/Components/UnitPreprocessing.cs index 8c56f0b6..00770ce2 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitPreprocessing.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitPreprocessing.cs @@ -27,9 +27,9 @@ public class UnitPreprocessing : UnitComponent private Material m_MaterialDepth; - public override void Initialize() + public override void Initialize(object obj = null) { - base.Initialize(); + base.Initialize(obj); } public override void OnPostInitialize() diff --git a/Erika/Assets/Scripts/Unit/Components/UnitRender.cs b/Erika/Assets/Scripts/Unit/Components/UnitRender.cs index a5822ffe..d20e56a8 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitRender.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitRender.cs @@ -19,9 +19,9 @@ public class UnitRender : UnitComponent }
} - public override void Initialize()
+ public override void Initialize(object obj = null)
{
- base.Initialize();
+ base.Initialize(obj);
} public override void OnPostInitialize()
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs b/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs index 4af856f2..c8f31f31 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitSkill.cs @@ -2,12 +2,15 @@ using System.Collections.Generic; using UnityEngine; -/// <summary> -/// 技能逻辑,包含combo -/// </summary> [DisallowMultipleComponent] public class UnitSkill : UnitComponent { + public struct Param + { + public List<SkillData> skills; + public List<ComboData> combos; + } + //角色所有技能数据 protected List<SkillData> m_AllSkills; @@ -29,4 +32,39 @@ public class UnitSkill : UnitComponent return owner.unitStatemachine; } } + + public override void Initialize(object obj = null) + { + base.Initialize(obj); + + Param param = (Param)obj; + m_AllSkills = param.skills; + m_AllCombos = param.combos; + + + } + + #region 技能状态判定 + + /// <summary> + /// 是否可以连招 + /// </summary> + /// <returns></returns> + public bool IsLink() + { + return false; + } + + public bool IsSkillMoveAble() + { + return false; + } + + public bool CanSkillMove() + { + return false; + } + + #endregion + } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs index e44c7f85..e8eec45e 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs @@ -44,9 +44,9 @@ public partial class PCState : UnitState private EUnitState m_PrevState; - public override void Initialize() + public override void Initialize(object obj) { - base.Initialize(); + base.Initialize(obj); owner.onTimelineEvent += OnTimeLineEvent; } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs index e6b526f7..49ace09d 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/MonsterState.cs @@ -31,9 +31,9 @@ public class MonsterState : UnitState UnitMotion unitMotion { get { return m_Owner.unitMotion; } } - public override void Initialize() + public override void Initialize(object obj) { - base.Initialize(); + base.Initialize(obj); } public void ChangeState<T>(EUnitState nextState, T param = default, bool bForce = false) @@ -116,7 +116,7 @@ public class MonsterState : UnitState yield return null; while (true) { - //bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; + //bool reachEnd = m_Owner.monsterAnimation.playbackClampedNormalizedTime == 1; //if(reachEnd) //{ // ChangeState(EUnitState.Idle, new IdleParam()); @@ -140,7 +140,7 @@ public class MonsterState : UnitState yield return null; while (true) { - //bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; + //bool reachEnd = m_Owner.monsterAnimation.playbackClampedNormalizedTime == 1; //if (reachEnd) //{ // //yield return new WaitForSeconds(1f); @@ -167,7 +167,7 @@ public class MonsterState : UnitState float g = -15.8f; while (true) { - //bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; + //bool reachEnd = m_Owner.monsterAnimation.playbackClampedNormalizedTime == 1; //if (reachEnd) //{ // vy += g * Time.deltaTime; @@ -198,7 +198,7 @@ public class MonsterState : UnitState yield return null; while (true) { - //bool reachEnd = m_Owner.monsterAnimation.playbackNormalizedTime == 1; + //bool reachEnd = m_Owner.monsterAnimation.playbackClampedNormalizedTime == 1; //if (reachEnd) //{ // ChangeState(EUnitState.Idle, new IdleParam()); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs index 924b3014..c9a39513 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/UnitState.cs @@ -16,7 +16,7 @@ public class UnitState : UnitComponent {
get
{
- return owner.unitMotion.playbackNormalizedTime == 1;
+ return owner.unitMotion.playbackClampedNormalizedTime == 1;
}
} @@ -27,7 +27,7 @@ public class UnitState : UnitComponent {
if (!owner.unitMotion.animationData.HasProperty(EAnimationProperty.Endpoint))
return false;
- return owner.unitMotion.playbackNormalizedTime >= owner.unitMotion.animationData.GetProperty(EAnimationProperty.Endpoint);
+ return owner.unitMotion.playbackClampedNormalizedTime >= owner.unitMotion.animationData.GetProperty(EAnimationProperty.Endpoint);
}
} @@ -57,7 +57,7 @@ public class UnitState : UnitComponent {
get
{
- return owner.unitMotion.IsToggleOpen(EAnimationToogle.Link);
+ return owner.unitMotion.IsToggleOpen(EAnimationToogle.ComboLink);
}
} diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs index aa238da7..443450f0 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs @@ -27,6 +27,7 @@ namespace UnitStates.Common public override void OnFixedUpdate() { + } public override void OnUpdate() diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs new file mode 100644 index 00000000..061a607c --- /dev/null +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace UnitStates.Common +{ + + public class SkillState : UnitStateBase + { + public struct SkillParam : IStateParam + { + } + + public override void ModifyNextState(EUnitState state, UnitStateBase nextState) + { + } + + public override void OnEnter(IStateParam param) + { + m_Motion.Trigger(EAnimationType.Idle); + } + + public override void OnExit() + { + } + + public override void OnFixedUpdate() + { + } + + public override void OnUpdate() + { + } + } +} diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs.meta b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs.meta new file mode 100644 index 00000000..94c2a8e2 --- /dev/null +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/SkillState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: caaab93386974e5429d5ba2f97728f44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs index f7b76b3a..e6c820d3 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/UnitStatemachine.cs @@ -117,8 +117,11 @@ public sealed class UnitStatemachine : UnitComponent /// 切换到目标状态 /// </summary> /// <param name="state"></param> - public void ChangeState(EUnitState state, UnitStateBase.IStateParam param) + public bool ChangeState(EUnitState state, UnitStateBase.IStateParam param, bool bForce = false) { + if (!bForce && m_CurrentState == state) + return true; + UnitStateBase currentState = GetState(m_CurrentState); UnitStateBase nextState = GetState(state); if (currentState != null) @@ -131,6 +134,7 @@ public sealed class UnitStatemachine : UnitComponent { nextState.OnEnter(param); } + return true; } /// <summary> diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController.cs b/Erika/Assets/Scripts/Unit/Controller/PCController.cs index 95320912..0c3ef100 100644 --- a/Erika/Assets/Scripts/Unit/Controller/PCController.cs +++ b/Erika/Assets/Scripts/Unit/Controller/PCController.cs @@ -39,6 +39,7 @@ public sealed partial class PCController : UnitController {
fsm.AddState(EUnitState.Idle, new UnitStates.Common.IdleState());
fsm.AddState(EUnitState.Move, new UnitStates.Common.MoveState());
+ fsm.AddState(EUnitState.Skill, new UnitStates.Common.SkillState());
fsm.ChangeState(EUnitState.Idle, null);
}
diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs b/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs index 7ec5d30d..7f86a574 100644 --- a/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs +++ b/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs @@ -2,12 +2,24 @@ using System.Collections.Generic; using UnityEngine; +// Input.XXXX() +// -> InputManager.InputXXX() +// -> PCController.CommandXXX() + public sealed partial class PCController : UnitController { - public void CommandMove() + public void CommandTurn (EUnitDirection dir) { - unitStatemachine.ChangeState(EUnitState.Move, null); + Turn(dir == EUnitDirection.Right); + } + + public void CommandMove(EUnitDirection dir) + { + if (!IsMoveAble()) + return; + + EnterMove(); } public void CommandIdle() @@ -23,7 +35,7 @@ public sealed partial class PCController : UnitController { } - public void CommandSkill() + public void CommandSkill(int id) { } diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController_States.cs b/Erika/Assets/Scripts/Unit/Controller/PCController_States.cs new file mode 100644 index 00000000..6eee60b5 --- /dev/null +++ b/Erika/Assets/Scripts/Unit/Controller/PCController_States.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public sealed partial class PCController : UnitController +{ + + private bool IsMoveAble() + { + return true; + } + + #region 操作statemachine + + private void EnterMove() + { + if (fsm.IsInState(EUnitState.Move)) + return; + + fsm.ChangeState(EUnitState.Move, null); + } + + #endregion + +} diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController_States.cs.meta b/Erika/Assets/Scripts/Unit/Controller/PCController_States.cs.meta new file mode 100644 index 00000000..f1ccd46a --- /dev/null +++ b/Erika/Assets/Scripts/Unit/Controller/PCController_States.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fafb158c8bb0c4340a63c4cb743706de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs index 3fec206a..9f765aae 100644 --- a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs +++ b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs @@ -9,6 +9,12 @@ using UnityEngine; // void OnGrab();
//}
+public enum EUnitDirection
+{
+ Right = 0, // 默认朝右
+ Left = 1, // 左
+}
+
/// <summary>
/// 角色控制器,包含所有角色组件的引用。可扩展
/// </summary>
@@ -210,9 +216,12 @@ public class UnitController : MonoBehaviour/*, Interactable*/ unitStatemachine = GetOrAddUnitComponent<UnitStatemachine>();
unitStatemachine.Initialize();
-
+
+ UnitSkill.Param unitSkillParam = new UnitSkill.Param();
+ unitSkillParam.combos = profile.combos;
+ unitSkillParam.skills = profile.skills;
unitSkill = GetOrAddUnitComponent<UnitSkill>();
- unitSkill.Initialize();
+ unitSkill.Initialize(unitSkillParam);
unitRootMotion = GetOrAddUnitComponent<UnitRootMotion>();
unitRootMotion.Initialize();
@@ -231,8 +240,11 @@ public class UnitController : MonoBehaviour/*, Interactable*/ unitPreprocessing = GetOrAddUnitComponent<UnitPreprocessing>();
unitPreprocessing.Initialize();
+
#endregion
+ unitObj.AddComponent<RootMotionProxy>();
+
unitDetail = gameObject.GetComponentInChildren<UnitDetail>();
unitPhysicsBoxes = gameObject.GetComponentInChildren<UnitPhysicsBoxCollection>();
@@ -290,7 +302,7 @@ public class UnitController : MonoBehaviour/*, Interactable*/ snapshot.trs = new TRS(unitObj.transform.position, unitObj.transform.rotation, unitObj.transform.lossyScale);
snapshot.unit = this;
snapshot.animStateHash = unitMotion.stateHash;
- snapshot.normalizedTime = unitMotion.playbackNormalizedTime;
+ snapshot.normalizedTime = unitMotion.playbackClampedNormalizedTime;
return snapshot;
}
diff --git a/Erika/Assets/Scripts/Unit/RootMotionProxy.cs b/Erika/Assets/Scripts/Unit/RootMotionProxy.cs index 96bba7ca..871c4f28 100644 --- a/Erika/Assets/Scripts/Unit/RootMotionProxy.cs +++ b/Erika/Assets/Scripts/Unit/RootMotionProxy.cs @@ -5,6 +5,9 @@ using UnityEngine; public class RootMotionProxy : MonoBehaviour { + /// <summary> + /// 有OnAnimatorMove方法时会屏蔽animator的apply rootmotion + /// </summary> private void OnAnimatorMove() { } diff --git a/Erika/Assets/Scripts/Unit/UnitProfile.cs b/Erika/Assets/Scripts/Unit/UnitProfile.cs index 37e07c7a..66e007ff 100644 --- a/Erika/Assets/Scripts/Unit/UnitProfile.cs +++ b/Erika/Assets/Scripts/Unit/UnitProfile.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine; /// <summary> -/// 用这个表创建unit +/// unit表 /// </summary> [CreateAssetMenu(fileName = "New Unit Profile", menuName = "Erika/Unit Profile")] public class UnitProfile : ScriptableObject @@ -39,4 +39,5 @@ public class UnitProfile : ScriptableObject [Tooltip("连招")] public List<ComboData> combos; -}
\ No newline at end of file +} + diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs index 661ecc5e..cc463c4b 100644 --- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs @@ -16,9 +16,9 @@ public class UnitRootMotion : UnitComponent float m_PrevFrame;
AnimationData m_PrevAnimationData;
- public override void Initialize()
+ public override void Initialize(object obj = null)
{
- base.Initialize();
+ base.Initialize(obj);
m_PrevFrame = 0;
m_PrevAnimationData = null;
@@ -81,7 +81,7 @@ public class UnitRootMotion : UnitComponent {
m_Owner.unitMotion.animator.transform.localPosition = Vector3.zero;
- //UpdateRootMotion();
+ UpdateRootMotion();
}
public void OnAnimationChange()
@@ -89,13 +89,13 @@ public class UnitRootMotion : UnitComponent m_PrevAnimationData = null;
}
- public void UpdateRootMotion()
+ public void UpdateRootMotion()
{
bool overrideRootMotion = m_Owner.unitMotion.animationData.overrideRootMotion;
if(overrideRootMotion)
{
var rmData = m_Owner.unitMotion.animationData.rootMotionOverrideData;
- float frame = m_Owner.unitMotion.playbackNormalizedTime * m_Owner.unitMotion.animationClip.length * TimelineEventProxy.FPS;
+ float frame = m_Owner.unitMotion.playbackClampedNormalizedTime * m_Owner.unitMotion.animationClip.length * TimelineEventProxy.FPS;
var animData = m_Owner.unitMotion.animationData;
if(animData != m_PrevAnimationData)
{
@@ -129,7 +129,7 @@ public class UnitRootMotion : UnitComponent dest.y = Mathf.Max(0, dest.y); // 从地面以下拉回
//m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
m_Owner.unitCharacterController.Move(dest);
- }
+ }
}
#endif
diff --git a/Erika/Assets/Scripts/Utils/UnityExtends.cs b/Erika/Assets/Scripts/Utils/UnityExtends.cs index faa26271..c87048a3 100644 --- a/Erika/Assets/Scripts/Utils/UnityExtends.cs +++ b/Erika/Assets/Scripts/Utils/UnityExtends.cs @@ -18,10 +18,10 @@ public static class UnityExtends //虽然这里的声明有参数,但是调用函数时不需要参数 public static void ResetTransformation(this Transform trans) { - trans.position = Vector3.zero; + trans.localPosition = Vector3.zero; trans.localRotation = Quaternion.identity; trans.localScale = new Vector3(1, 1, 1); - } + } } |