diff options
16 files changed, 180 insertions, 141 deletions
diff --git a/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity b/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity index 42c3083a..aa010edf 100644 --- a/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity +++ b/Erika/Assets/Bundle/Scenes/Demo/AnimationEditScene.unity @@ -123,6 +123,7 @@ GameObject: - component: {fileID: 152403862} - component: {fileID: 152403861} - component: {fileID: 152403863} + - component: {fileID: 152403864} m_Layer: 0 m_Name: InputManager m_TagString: Untagged @@ -168,6 +169,18 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 78d3bc54e34721e468d0541fb5c0c839, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &152403864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 152403860} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0524ad309fb60ba4cae5f63a6f5c1bb3, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &203878585 GameObject: m_ObjectHideFlags: 0 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 e25ffbd8..4b8fcdfb 100644 --- a/Erika/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller +++ b/Erika/Assets/Bundle/Unit/PC/Erika/AnimatorController/Erika_AnimatorController.controller @@ -856,7 +856,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: 7400000, guid: 599f2b26128dfd742b4aefbc285c4d3e, type: 2} + m_Motion: {fileID: 0} m_Tag: m_SpeedParameter: m_MirrorParameter: diff --git a/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs b/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs new file mode 100644 index 00000000..ebcb457e --- /dev/null +++ b/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class InputKeyboardMouse : MonoBehaviour +{ + void Update() + { + if (Input.GetButtonDown("Fire1")) + { + PCController.instance.CommandMove(); + } + if (Input.GetButtonDown("Fire2")) + { + PCController.instance.CommandIdle(); + } + + } +} diff --git a/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs.meta b/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs.meta new file mode 100644 index 00000000..3ccc10f4 --- /dev/null +++ b/Erika/Assets/Scripts/Input/InputKeyboardMouse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0524ad309fb60ba4cae5f63a6f5c1bb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Scripts/Input/InputManager.cs b/Erika/Assets/Scripts/Input/InputManager.cs index 57bc3399..5403d779 100644 --- a/Erika/Assets/Scripts/Input/InputManager.cs +++ b/Erika/Assets/Scripts/Input/InputManager.cs @@ -2,93 +2,23 @@ using System.Collections.Generic;
using UnityEngine;
-public struct InputCommand
-{
- public KeyCode key;
- public float time;
-}
-
-// 处理输入逻辑,不涉及读取输入,只处理逻辑
+/// <summary>
+/// 只处理逻辑,不涉及输入。逻辑和输入分离
+/// </summary>
public class InputManager : SingletonMB<InputManager>
{
- PCController _pc;
-
- List<InputCommand> m_CommandQueue = new List<InputCommand>();
-
- const float threshold = 3;
-
- PCController pc
- {
- get
- {
- if (_pc == null)
- _pc = PCController.instance;
- return _pc;
- }
- }
-
- public void OnUpdate()
- {
- foreach (KeyCode vKey in System.Enum.GetValues(typeof(KeyCode)))
- {
- if (Input.GetKeyDown(vKey))
- {
- InputCommand cmd = new InputCommand();
- cmd.key = vKey;
- cmd.time = Time.time;
- m_CommandQueue.Add(cmd);
- }
- }
- float curTime = Time.time;
- int removeCount = 0;
- for(int i = 0; i < m_CommandQueue.Count; ++i)
- {
- if(curTime - m_CommandQueue[i].time > threshold)
- {
- removeCount++;
- }
- }
- m_CommandQueue.RemoveRange(0, removeCount);
- }
-
- public bool TryCommand(float interval = 0.5f, params KeyCode[] keys)
- {
- return TryCommand(interval, true, keys);
-
+ public void InputMove()
+ {
}
- public bool TryCommand(float interval = 0.5f, bool checkInput = false, params KeyCode[] keys)
+ public void InputSkill()
{
- if (keys.Length > m_CommandQueue.Count)
- return false;
- if (checkInput && !Input.GetKey(keys[keys.Length - 1]))
- return false;
- int count = m_CommandQueue.Count;
- float preTime = m_CommandQueue[count - keys.Length].time;
- for (int i = 0; i < keys.Length; ++i)
- {
- if (keys[i] == m_CommandQueue[i + count - keys.Length].key)
- {
- if (m_CommandQueue[i + count - keys.Length].time - preTime > interval)
- {
- return false;
- }
- preTime = m_CommandQueue[i + count - keys.Length].time;
- }
- else
- {
- return false;
- }
- }
- //m_CommandQueue.RemoveRange(count - keys.Length, keys.Length);
- m_CommandQueue.Clear(); // 清理
- return true;
+
}
- public void ClearCommand()
+ public void InputDodge()
{
- m_CommandQueue.Clear();
}
}
diff --git a/Erika/Assets/Scripts/Managers/UnitManager.cs b/Erika/Assets/Scripts/Managers/UnitManager.cs index 043e377a..53d25762 100644 --- a/Erika/Assets/Scripts/Managers/UnitManager.cs +++ b/Erika/Assets/Scripts/Managers/UnitManager.cs @@ -73,7 +73,8 @@ public class UnitManager : Singleton<UnitManager> // 模型unit model
GameObject unitModel = GameObject.Instantiate(profile.unitPrefab);
unitModel.transform.SetParent(unitCtrl.transform);
- unitModel.transform.ResetTransformation();
+ //unitModel.transform.ResetTransformation();
+ unitModel.transform.localPosition = Vector3.zero;
unitModel.transform.localRotation = Quaternion.Euler(0, 90, 0);
// 装配初始化
diff --git a/Erika/Assets/Scripts/Test2/TestInput.cs b/Erika/Assets/Scripts/Test2/TestInput.cs index 1a43f108..5c46886b 100644 --- a/Erika/Assets/Scripts/Test2/TestInput.cs +++ b/Erika/Assets/Scripts/Test2/TestInput.cs @@ -7,7 +7,7 @@ public class TestInput : MonoBehaviour private void Update() { - InputManager.Instance.OnUpdate(); + //InputManager.Instance.OnUpdate(); } } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs index d94a3f44..5836abac 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitAnimation/UnitMotion.cs @@ -43,7 +43,9 @@ public class UnitMotion : UnitComponent set { m_currentMotionIDID = value; - m_Dirty = true; + + m_AnimationClip = null; + m_Dirty = true; } } @@ -73,16 +75,21 @@ public class UnitMotion : UnitComponent } // 当前动作的动画片段 - public AnimationClip animationClip + private AnimationClip m_AnimationClip; + public AnimationClip animationClip { get { - if(animationData != null) - { - AnimationClip clip = ResourceManager.Instance.LoadAsset<AnimationClip>(animationData.animationPath); - return clip; - } - return null; + if(m_AnimationClip == null) + { + if (animationData != null) + { + AnimationClip clip = ResourceManager.Instance.LoadAsset<AnimationClip>(animationData.animationPath); + m_AnimationClip = clip; + return clip; + } + } + return m_AnimationClip; } } @@ -91,9 +98,10 @@ public class UnitMotion : UnitComponent get { AnimatorStateInfo state = stateInfo; - if (!state.loop && state.normalizedTime > 1) - return 1; - return state.normalizedTime % 1f; + //if (!state.loop && state.normalizedTime > 1) // 不知道为啥state.loop不对,始终是false,改用animationClip.isLooping + if(!animationClip.isLooping && state.normalizedTime > 1) + return 1; + return state.normalizedTime % 1f; } } @@ -339,8 +347,11 @@ public class UnitMotion : UnitComponent { if(m_Animator != null) { - m_OverrideController[target] = clip != null ? clip : null; - return true; + if(m_OverrideController[target] != clip) + { + m_OverrideController[target] = clip != null ? clip : null; + } + return true; } return false; } diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs index 4a7d489c..e44c7f85 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState.cs @@ -110,16 +110,16 @@ public partial class PCState : UnitState void TryDash()
{
- if (InputManager.Instance.TryCommand(0.5f, KeyCode.A, KeyCode.A))
- {
- TurnLeft();
- ChangeState(EUnitState.AirDash, new AirDashParam(), true);
- }
- if (InputManager.Instance.TryCommand(0.5f, KeyCode.D, KeyCode.D))
- {
- TurnRight();
- ChangeState(EUnitState.AirDash, new AirDashParam(), true);
- } + //if (InputManager.Instance.TryCommand(0.5f, KeyCode.A, KeyCode.A))
+ //{
+ // TurnLeft();
+ // ChangeState(EUnitState.AirDash, new AirDashParam(), true);
+ //}
+ //if (InputManager.Instance.TryCommand(0.5f, KeyCode.D, KeyCode.D))
+ //{
+ // TurnRight();
+ // ChangeState(EUnitState.AirDash, new AirDashParam(), true);
+ //} } void TryTurnAround()
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 16a099d7..951945e3 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitState/Erika/PCState_States.cs @@ -176,7 +176,7 @@ public partial class PCState : UnitState {
//m_Owner.pcAnimation.AnimAttackToAir(param.offset);
yield return null; - InputManager.Instance.ClearCommand(); + //InputManager.Instance.ClearCommand(); while (true)
{
TryTianyin();
@@ -185,11 +185,11 @@ public partial class PCState : UnitState {
TryDash();
- if (InputManager.Instance.TryCommand(0.5f, false, KeyCode.J))
- {
- ChangeState(EUnitState.AirAttack, new SkillParam());
- yield break; - }
+ //if (InputManager.Instance.TryCommand(0.5f, false, KeyCode.J))
+ //{
+ // ChangeState(EUnitState.AirAttack, new SkillParam());
+ // yield break; + //}
}
if (isAnimationReachEnd || isAnimationReachEndPoint) @@ -215,7 +215,7 @@ public partial class PCState : UnitState int id = 0;
//m_Owner.pcAnimation.AnimAirAttack(id++); yield return null; - InputManager.Instance.ClearCommand(); + //InputManager.Instance.ClearCommand(); while (true) {
if (TryTeleport())
@@ -228,15 +228,15 @@ public partial class PCState : UnitState {
TryDash(); - if (InputManager.Instance.TryCommand(0.3f, false, KeyCode.J)) - { - TryTurnAround();
+ //if (InputManager.Instance.TryCommand(0.3f, false, KeyCode.J)) + //{ + // TryTurnAround();
- //m_Owner.pcAnimation.AnimAirAttack(id++);
- //id %= total; - ////yield return null; // 等待animator更新 - //yield return new WaitForTransitionDone(m_Owner.pcAnimation); - } + // //m_Owner.pcAnimation.AnimAirAttack(id++);
+ // //id %= total; + // ////yield return null; // 等待animator更新 + // //yield return new WaitForTransitionDone(m_Owner.pcAnimation); + //} } if (isAnimationReachEnd) @@ -303,18 +303,18 @@ public partial class PCState : UnitState //yield return new WaitForTransitionDone(pcAnimation); while (true) { - if (InputManager.Instance.TryCommand(0.5f, KeyCode.A, KeyCode.A)) - { - TurnLeft(); - ChangeState(EUnitState.AirDash, new AirDashParam()); - yield break; - } - if (InputManager.Instance.TryCommand(0.5f, KeyCode.D, KeyCode.D)) - { - TurnRight(); - ChangeState(EUnitState.AirDash, new AirDashParam()); - yield break; - } + //if (InputManager.Instance.TryCommand(0.5f, KeyCode.A, KeyCode.A)) + //{ + // TurnLeft(); + // ChangeState(EUnitState.AirDash, new AirDashParam()); + // yield break; + //} + //if (InputManager.Instance.TryCommand(0.5f, KeyCode.D, KeyCode.D)) + //{ + // TurnRight(); + // ChangeState(EUnitState.AirDash, new AirDashParam()); + // yield break; + //} if (isAnimationReachEnd)
{
ChangeState(EUnitState.Landing, new LandingParam()); diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs index e477d671..0aab3c51 100644 --- a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/IdleState.cs @@ -18,7 +18,7 @@ namespace UnitStates.Common public override void OnEnter(IStateParam param) { - m_Motion.CrossFade(EAnimationType.Idle, 0); + m_Motion.CrossFade(EAnimationType.Idle, 1f); } public override void OnExit() diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/MoveState.cs b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/MoveState.cs new file mode 100644 index 00000000..6354af59 --- /dev/null +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/MoveState.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace UnitStates.Common +{ + + public class MoveState : UnitStateBase + { + public struct IdleParam : IStateParam + { + } + + public override void ModifyNextState(EUnitState state, UnitStateBase nextState) + { + } + + public override void OnEnter(IStateParam param) + { + m_Motion.CrossFade(EAnimationType.Move, 1f); + } + + public override void OnExit() + { + } + + public override void OnFixedUpdate() + { + } + + public override void OnUpdate() + { + } + } +} diff --git a/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/MoveState.cs.meta b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/MoveState.cs.meta new file mode 100644 index 00000000..104d446c --- /dev/null +++ b/Erika/Assets/Scripts/Unit/Components/UnitStatemachine/Common/MoveState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18b4515f03d0b0d40ba3851fce451a64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController.cs b/Erika/Assets/Scripts/Unit/Controller/PCController.cs index e7c20766..95320912 100644 --- a/Erika/Assets/Scripts/Unit/Controller/PCController.cs +++ b/Erika/Assets/Scripts/Unit/Controller/PCController.cs @@ -38,18 +38,11 @@ public sealed partial class PCController : UnitController void InitStatemachine()
{
fsm.AddState(EUnitState.Idle, new UnitStates.Common.IdleState());
- fsm.AddState(EUnitState.Move, new UnitStates.Common.IdleState());
+ fsm.AddState(EUnitState.Move, new UnitStates.Common.MoveState());
fsm.ChangeState(EUnitState.Idle, null);
}
- public override void Update()
- {
- base.Update();
- unitAfterImage.OnUpdate();
- unitImageEffect.OnUpdate();
- }
-
public override void OnGrab()
{
}
diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs b/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs index cf6d31f7..7ec5d30d 100644 --- a/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs +++ b/Erika/Assets/Scripts/Unit/Controller/PCController_Commands.cs @@ -7,6 +7,12 @@ public sealed partial class PCController : UnitController public void CommandMove() { + unitStatemachine.ChangeState(EUnitState.Move, null); + } + + public void CommandIdle() + { + unitStatemachine.ChangeState(EUnitState.Idle, null); } public void CommandDodge() diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs index c8df0729..661ecc5e 100644 --- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs +++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs @@ -74,9 +74,17 @@ public class UnitRootMotion : UnitComponent public override void OnUpdate()
{
base.OnUpdate();
+
}
- public void OnAnimationChange()
+ public void LateUpdate()
+ {
+ m_Owner.unitMotion.animator.transform.localPosition = Vector3.zero;
+
+ //UpdateRootMotion();
+ }
+
+ public void OnAnimationChange()
{
m_PrevAnimationData = null;
}
|