diff --git a/Packages/Character/Runtime/Animator/AnimatorStandard.cs b/Packages/Character/Runtime/Animator/AnimatorStandard.cs deleted file mode 100644 index d7121dc..0000000 --- a/Packages/Character/Runtime/Animator/AnimatorStandard.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public class AnimatorStandard : IAnimator { - private string layer; - private string current; - private Animator animator; - - private void Awake() => animator = GetComponent(); - - public override void Transition(string name) { - if (current == name) { animator.Play(name); } - else { animator.CrossFade(name, 0.1f); } - current = name; - - // 判断当前动画,如果不是相同动画就增加过渡 - // AnimatorStateInfo currentState = animator.GetCurrentAnimatorStateInfo(0); - // Debug.Log($"{currentState.normalizedTime} , {this.kinesis.AnimName}"); - } - - public override void SetFloat(string name, float value) => animator.SetFloat(name, value); - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Animator/IAnimator.cs b/Packages/Character/Runtime/Animator/IAnimator.cs deleted file mode 100644 index ee6bfd5..0000000 --- a/Packages/Character/Runtime/Animator/IAnimator.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - [RequireComponent(typeof(Animator))] - public abstract class IAnimator : MonoBehaviour { - /// 动画过渡 - public abstract void Transition(string name); - /// 设置参数 - public abstract void SetFloat(string name, float value); - } -} diff --git a/Packages/Character/Runtime/Character.meta b/Packages/Character/Runtime/Character.meta deleted file mode 100644 index b00b676..0000000 --- a/Packages/Character/Runtime/Character.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ddf575a280d8de544894143ab841f4d7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Character/CharacterPlayer.cs b/Packages/Character/Runtime/Character/CharacterPlayer.cs deleted file mode 100644 index 5c1f27a..0000000 --- a/Packages/Character/Runtime/Character/CharacterPlayer.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public class CharacterPlayer : ICharacter { - - private void Awake() => Transitionkinesis(new KinesisIdle(this)); - - public override void Transitionkinesis(Ikinesis kinesis) { - if (currentKinesis != null && !currentKinesis.Transition(kinesis)) { return; } - currentKinesis = kinesis; - currentKinesis.Startkinesis(); - } - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Character/ICharacter.cs b/Packages/Character/Runtime/Character/ICharacter.cs deleted file mode 100644 index 7e7d438..0000000 --- a/Packages/Character/Runtime/Character/ICharacter.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public abstract class ICharacter : MonoBehaviour { - public Ikinesis currentKinesis; - - public void Update() => currentKinesis.Update(); - - /// 过渡动作 - public abstract void Transitionkinesis(Ikinesis kinesis); - - /// 触发动画特效 - public virtual void AnimationEffects() => currentKinesis.AnimationEffects(); - /// 动画结束 - public virtual void AnimationEnd() => currentKinesis.AnimationEnd(); - /// 动画退出 - public virtual void AnimationExit() => currentKinesis.AnimationExit(); - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Character/ICharacter.cs.meta b/Packages/Character/Runtime/Character/ICharacter.cs.meta deleted file mode 100644 index 151af2e..0000000 --- a/Packages/Character/Runtime/Character/ICharacter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9523e030f852bd0488ea72f52125fc67 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Animator.meta b/Packages/Character/Runtime/Component.meta similarity index 77% rename from Packages/Character/Runtime/Animator.meta rename to Packages/Character/Runtime/Component.meta index edf4eef..8d9bc2f 100644 --- a/Packages/Character/Runtime/Animator.meta +++ b/Packages/Character/Runtime/Component.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f0aeb4e44882d754a94ca38a40711e98 +guid: 6636b9d6db0317e43a61b41ac2b2297d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/Character/Runtime/Component/KinesisAnimator.cs b/Packages/Character/Runtime/Component/KinesisAnimator.cs new file mode 100644 index 0000000..3c33110 --- /dev/null +++ b/Packages/Character/Runtime/Component/KinesisAnimator.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MuHua { + /// + /// 动作动画控制器 + /// + [RequireComponent(typeof(Animator))] + public class KinesisAnimator : MonoBehaviour { + protected int layerIndex; + protected string current; + protected Animator animator; + protected IKinesis kinesis; + + public virtual void Awake() => animator = GetComponent(); + + /// 设置动作 + public virtual void SetKinesis(IKinesis kinesis) => this.kinesis = kinesis; + /// 动画过渡 + public virtual void Transition(int layerIndex, string name, float normalizedTransitionDuration = 0.1f) { + animator.SetLayerWeight(this.layerIndex, 0); + animator.SetLayerWeight(layerIndex, 1); + this.layerIndex = layerIndex; + Transition(name, normalizedTransitionDuration); + } + /// 动画过渡 + public virtual void Transition(string name, float normalizedTransitionDuration = 0.1f) { + if (current == name) { animator.Play(name); } + else { animator.CrossFade(name, normalizedTransitionDuration); } + current = name; + } + + /// 设置参数 + public virtual void SetBool(string name, bool value) => animator.SetBool(name, value); + /// 设置参数 + public virtual void SetFloat(string name, float value) => animator.SetFloat(name, value); + + /// 触发动画特效 + public virtual void AnimationEffects() => kinesis?.AnimationEffects(); + /// 动画结束(有后摇) + public virtual void AnimationEnd() => kinesis?.AnimationEnd(); + /// 动画退出(无后摇) + public virtual void AnimationExit() => kinesis?.AnimationExit(); + } +} diff --git a/Packages/Character/Runtime/Character/CharacterPlayer.cs.meta b/Packages/Character/Runtime/Component/KinesisAnimator.cs.meta similarity index 83% rename from Packages/Character/Runtime/Character/CharacterPlayer.cs.meta rename to Packages/Character/Runtime/Component/KinesisAnimator.cs.meta index 62892ff..45f3a31 100644 --- a/Packages/Character/Runtime/Character/CharacterPlayer.cs.meta +++ b/Packages/Character/Runtime/Component/KinesisAnimator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 28866a6768c3e7441aa12caefd6217b5 +guid: e3ceef7224b9b094aadaa9b3a0238648 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/Character/Runtime/Component/KinesisController.cs b/Packages/Character/Runtime/Component/KinesisController.cs new file mode 100644 index 0000000..6c60d99 --- /dev/null +++ b/Packages/Character/Runtime/Component/KinesisController.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MuHua { + /// + /// 动作控制器 + /// + public class KinesisController : MonoBehaviour { + public KinesisAnimator animator; + public KinesisMovement movement; + + private IKinesis currentKinesis; + + public virtual void Awake() => TransitionKinesis(new KinesisIdle()); + + public virtual void Update() => currentKinesis?.UpdateKinesis(); + + /// 动作过渡 + public virtual void TransitionKinesis(IKinesis kinesis) { + //不可以转换 + if (currentKinesis != null && !currentKinesis.Transition(kinesis)) { return; } + //进行转换 + currentKinesis?.FinishKinesis(); + currentKinesis = kinesis; + currentKinesis?.StartKinesis(); + + animator?.SetKinesis(currentKinesis); + movement?.SetKinesis(currentKinesis); + } + } +} \ No newline at end of file diff --git a/Packages/Character/Runtime/Animator/IAnimator.cs.meta b/Packages/Character/Runtime/Component/KinesisController.cs.meta similarity index 83% rename from Packages/Character/Runtime/Animator/IAnimator.cs.meta rename to Packages/Character/Runtime/Component/KinesisController.cs.meta index 273d3b3..e438c20 100644 --- a/Packages/Character/Runtime/Animator/IAnimator.cs.meta +++ b/Packages/Character/Runtime/Component/KinesisController.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e64668e8630d6c149bd637156aa1c42d +guid: 2c1979e13b26c7b48a7a4690da154535 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/Character/Runtime/Component/KinesisMovement.cs b/Packages/Character/Runtime/Component/KinesisMovement.cs new file mode 100644 index 0000000..be0bda5 --- /dev/null +++ b/Packages/Character/Runtime/Component/KinesisMovement.cs @@ -0,0 +1,100 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MuHua { + /// + /// 动作运动控制器 + /// + [RequireComponent(typeof(CharacterController))] + public class KinesisMovement : MonoBehaviour { + public float moveSpeed = 5;// 移动速度 + public float acceleration = 10.0f;// 加速度 + [Range(0.0f, 0.3f)] + public float rotationSmoothTime = 0.12f;// 旋转平滑 + + protected float currentSpeed;// 当前速度 + protected Vector2 moveDirection;// 移动方向 + protected float animationBlend;// 动画混合速度 + protected float targetRotation = 0.0f;// 旋转目标 + protected float rotationVelocity;// 旋转速度 + protected float verticalVelocity;// 垂直速度 + protected IKinesis kinesis;// 当前动作 + protected KinesisAnimator animator;// 动作动画控制器 + protected CharacterController controller;// 角色控制器 + + public virtual bool IsStop => currentSpeed == 0; + + public virtual void Awake() { + animator = GetComponent(); + controller = GetComponent(); + } + public virtual void Update() { + PlanarMovement(); + } + + /// 设置动作 + public virtual void SetKinesis(IKinesis kinesis) => this.kinesis = kinesis; + /// 设置方向 + public virtual void SetDirection(Vector2 moveDirection) => this.moveDirection = moveDirection; + /// 停止移动 + public virtual void StopMovement() { + currentSpeed = 0; + moveDirection = Vector2.zero; + animationBlend = 0; + animator?.SetFloat("MoveSpeed", animationBlend); + } + + /// 平面移动 + public virtual void PlanarMovement() { + // 设定目标速度 + float targetSpeed = moveSpeed; + + // 一种简单的加速和减速设计,易于拆卸、更换或迭代 + + // 如果没有输入,将目标速度设置为0 + if (moveDirection == Vector2.zero && currentSpeed == 0) { return; } + if (moveDirection == Vector2.zero) targetSpeed = 0.0f; + + // 当前水平速度的参考 + // float currentHorizontalSpeed = new Vector3(controller.velocity.x, 0.0f, controller.velocity.z).magnitude; + + // float speedOffset = 0.1f; + + // 加速或减速至目标速度 + // if (currentHorizontalSpeed < targetSpeed - speedOffset || currentHorizontalSpeed > targetSpeed + speedOffset) { + // 产生弯曲的结果,而不是线性的结果,从而产生更有机的速度变化 + // 注意Lerp中的T是夹紧的,所以我们不需要夹紧我们的速度 + currentSpeed = Mathf.Lerp(currentSpeed, targetSpeed, Time.deltaTime * acceleration); + + // round speed to 3 decimal places + currentSpeed = Mathf.Round(currentSpeed * 1000f) / 1000f; + // } + // else { currentSpeed = targetSpeed; } + + animationBlend = Mathf.Lerp(animationBlend, targetSpeed, Time.deltaTime * acceleration); + if (animationBlend < 0.01f) animationBlend = 0f; + + // 使输入方向标准化 + Vector3 inputDirection = new Vector3(moveDirection.x, 0.0f, moveDirection.y).normalized; + + // 如果有移动输入,则在玩家移动时旋转玩家 + if (moveDirection != Vector2.zero) { + targetRotation = Mathf.Atan2(inputDirection.x, inputDirection.z) * Mathf.Rad2Deg; + float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref rotationVelocity, rotationSmoothTime); + + // 相对于相机位置旋转到面向输入方向 + transform.rotation = Quaternion.Euler(0.0f, rotation, 0.0f); + } + + + Vector3 targetDirection = Quaternion.Euler(0.0f, targetRotation, 0.0f) * Vector3.forward; + + // 移动 + controller.Move(targetDirection.normalized * (currentSpeed * Time.deltaTime) + new Vector3(0.0f, verticalVelocity, 0.0f) * Time.deltaTime); + + // 如果使用角色,请更新动画师 + animator?.SetFloat("MoveSpeed", animationBlend); + } + } +} diff --git a/Packages/Character/Runtime/Animator/AnimatorStandard.cs.meta b/Packages/Character/Runtime/Component/KinesisMovement.cs.meta similarity index 83% rename from Packages/Character/Runtime/Animator/AnimatorStandard.cs.meta rename to Packages/Character/Runtime/Component/KinesisMovement.cs.meta index ad3575e..ed8a330 100644 --- a/Packages/Character/Runtime/Animator/AnimatorStandard.cs.meta +++ b/Packages/Character/Runtime/Component/KinesisMovement.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8394161d0e9670f4a83246f5a5da722b +guid: 61ef13b926e462442920d0ba932e8e27 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/Character/Runtime/Controller/ControllerPlayer.cs b/Packages/Character/Runtime/Controller/ControllerPlayer.cs deleted file mode 100644 index 8fecd6d..0000000 --- a/Packages/Character/Runtime/Controller/ControllerPlayer.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.InputSystem; - -namespace MuHua { - public class ControllerPlayer : MonoBehaviour { - public Transform cameraController; // 相机对象 - public CharacterPlayer character; - - private Vector2 moveInput; - - private void Update() { - if (moveInput == Vector2.zero) { return; } - // 获取相机的前向和右向 - Vector3 cameraForward = cameraController.transform.forward; - Vector3 cameraRight = cameraController.transform.right; - - // 忽略相机的y轴 - cameraForward.y = 0; - cameraRight.y = 0; - - // 归一化向量 - cameraForward.Normalize(); - cameraRight.Normalize(); - - // 计算相对于相机的移动方向 - Vector3 moveDirection = (cameraForward * moveInput.y + cameraRight * moveInput.x).normalized; - - // 相对于玩家的移动方向 - Vector3 position = character.transform.position + new Vector3(moveDirection.x, 0, moveDirection.z) * 0.5f; - KinesisMove kinesis = new KinesisMove(character, position); - character.Transitionkinesis(kinesis); - } - - #region 输入系统 - public void OnMove(InputValue inputValue) { - // 获取移动输入 - moveInput = inputValue.Get(); - } - #endregion - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Controller/ControllerPlayer.cs.meta b/Packages/Character/Runtime/Controller/ControllerPlayer.cs.meta deleted file mode 100644 index ce278f9..0000000 --- a/Packages/Character/Runtime/Controller/ControllerPlayer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 73bafdf07b08fc246ab173a5e555629e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/EffectsLaunch/EffectsLaunch.cs b/Packages/Character/Runtime/EffectsLaunch/EffectsLaunch.cs deleted file mode 100644 index a0ce196..0000000 --- a/Packages/Character/Runtime/EffectsLaunch/EffectsLaunch.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public abstract class EffectsLaunch : MonoBehaviour { - - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/EffectsLaunch/EffectsLaunch.cs.meta b/Packages/Character/Runtime/EffectsLaunch/EffectsLaunch.cs.meta deleted file mode 100644 index 759864a..0000000 --- a/Packages/Character/Runtime/EffectsLaunch/EffectsLaunch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 36eaafdfeb2c4f44f82504e36afe1cda -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Controller.meta b/Packages/Character/Runtime/Interface.meta similarity index 77% rename from Packages/Character/Runtime/Controller.meta rename to Packages/Character/Runtime/Interface.meta index 84a9592..784b45d 100644 --- a/Packages/Character/Runtime/Controller.meta +++ b/Packages/Character/Runtime/Interface.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 91660569267b53545ab6e688c384eae2 +guid: a373c751fa5625249af75654ab69aec4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/Character/Runtime/Interface/IKinesis.cs b/Packages/Character/Runtime/Interface/IKinesis.cs new file mode 100644 index 0000000..cf508c5 --- /dev/null +++ b/Packages/Character/Runtime/Interface/IKinesis.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MuHua { + /// + /// 角色动作 + /// + public interface IKinesis { + /// 动作过渡 + public bool Transition(IKinesis kinesis); + /// 开始动作 + public void StartKinesis(); + /// 更新动作 + public void UpdateKinesis(); + /// 完成动作 + public void FinishKinesis(); + + /// 触发动画特效 + public void AnimationEffects(); + /// 动画结束(有后摇) + public void AnimationEnd(); + /// 动画退出(无后摇) + public void AnimationExit(); + } +} diff --git a/Packages/Character/Runtime/Kinesis/Ikinesis.cs.meta b/Packages/Character/Runtime/Interface/IKinesis.cs.meta similarity index 100% rename from Packages/Character/Runtime/Kinesis/Ikinesis.cs.meta rename to Packages/Character/Runtime/Interface/IKinesis.cs.meta diff --git a/Packages/Character/Runtime/Kinesis.meta b/Packages/Character/Runtime/Kinesis.meta deleted file mode 100644 index aaf0fb6..0000000 --- a/Packages/Character/Runtime/Kinesis.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ff61e8e49afe14548a5ec4151e14ab34 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Kinesis/Ikinesis.cs b/Packages/Character/Runtime/Kinesis/Ikinesis.cs deleted file mode 100644 index a279552..0000000 --- a/Packages/Character/Runtime/Kinesis/Ikinesis.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - /// - /// 角色动作 - /// - public abstract class Ikinesis { - /// 持续更新 - public virtual void Update() { } - - /// 动作过渡 - public abstract bool Transition(Ikinesis kinesis); - - public virtual void Startkinesis() { } - - /// 触发动画特效 - public virtual void AnimationEffects() { } - /// 动画结束 - public virtual void AnimationEnd() { } - /// 动画退出 - public virtual void AnimationExit() { } - } -} diff --git a/Packages/Character/Runtime/Kinesis/KinesisAttack.cs b/Packages/Character/Runtime/Kinesis/KinesisAttack.cs deleted file mode 100644 index 3127ca0..0000000 --- a/Packages/Character/Runtime/Kinesis/KinesisAttack.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public class KinesisAttack : Ikinesis { - public bool animEnd = false; - public string animName; - public IAnimator animator; - - public KinesisAttack(ICharacter character, string name = "Attack01") { - animName = name; - animator = character.GetComponent(); - } - - public override bool Transition(Ikinesis kinesis) => animEnd; - - public override void Startkinesis() => animator.Transition(animName); - - public override void AnimationEnd() => animEnd = true; - } -} diff --git a/Packages/Character/Runtime/Kinesis/KinesisAttack.cs.meta b/Packages/Character/Runtime/Kinesis/KinesisAttack.cs.meta deleted file mode 100644 index 0f68ee0..0000000 --- a/Packages/Character/Runtime/Kinesis/KinesisAttack.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6c910b7b6bba29d4381c9bb1d615ff77 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Kinesis/KinesisIdle.cs b/Packages/Character/Runtime/Kinesis/KinesisIdle.cs deleted file mode 100644 index 3e8e6ea..0000000 --- a/Packages/Character/Runtime/Kinesis/KinesisIdle.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public class KinesisIdle : Ikinesis { - public IAnimator animator; - - public KinesisIdle(ICharacter character) => animator = character.GetComponent(); - - public override bool Transition(Ikinesis kinesis) => true; - - public override void Startkinesis() => animator.Transition("Idle"); - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Kinesis/KinesisMove.cs b/Packages/Character/Runtime/Kinesis/KinesisMove.cs deleted file mode 100644 index 94721e6..0000000 --- a/Packages/Character/Runtime/Kinesis/KinesisMove.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public class KinesisMove : Ikinesis { - public Vector3 position; - public IMovement movement; - public IAnimator animator; - public ICharacter character; - - public KinesisMove(ICharacter character, Vector3 position) { - this.position = position; - this.character = character; - movement = character.GetComponent(); - animator = character.GetComponent(); - } - - public override bool Transition(Ikinesis kinesis) => true; - - public override void Startkinesis() => animator.Transition("Move"); - - public override void Update() { - if (movement.UpdateMove(position, 5)) { character.Transitionkinesis(new KinesisIdle(character)); } - - animator.SetFloat("MoveSpeed", movement.CurrentSpeed); - animator.SetFloat("MoveX", movement.Direction.x); - animator.SetFloat("MoveZ", movement.Direction.z); - } - } -} diff --git a/Packages/Character/Runtime/Kinesis/KinesisTurn.cs b/Packages/Character/Runtime/Kinesis/KinesisTurn.cs deleted file mode 100644 index 7cd2411..0000000 --- a/Packages/Character/Runtime/Kinesis/KinesisTurn.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using MuHua; -using UnityEngine; - -namespace MuHua { - public class KinesisTurn : Ikinesis { - - - public override bool Transition(Ikinesis kinesis) { - throw new System.NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Kinesis/KinesisTurn.cs.meta b/Packages/Character/Runtime/Kinesis/KinesisTurn.cs.meta deleted file mode 100644 index 2a361b9..0000000 --- a/Packages/Character/Runtime/Kinesis/KinesisTurn.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 891f774ac729c45409682ff40c2d4615 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Machine.meta b/Packages/Character/Runtime/Machine.meta deleted file mode 100644 index 00acda8..0000000 --- a/Packages/Character/Runtime/Machine.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0559d32326453c64bb54d392731648a2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Machine/IMachine.cs b/Packages/Character/Runtime/Machine/IMachine.cs deleted file mode 100644 index 4667d92..0000000 --- a/Packages/Character/Runtime/Machine/IMachine.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - /// - /// 有限状态机 - /// - public abstract class IMachine : MonoBehaviour { - protected IMachineState currentState; - protected Dictionary states = new Dictionary(); - - protected virtual void Start() => InitializeStates(); - protected virtual void Update() => currentState?.Update(); - - #region 状态机功能 - protected abstract void InitializeStates(); - protected virtual void RegisterState(string stateType, IMachineState state) { - if (!states.ContainsKey(stateType)) { states.Add(stateType, state); } - } - public virtual void ChangeState(string stateType) { - if (states.ContainsKey(stateType)) { - currentState?.Exit(); - currentState = states[stateType]; - currentState.Enter(); - } - else { - Debug.LogWarning($"State {stateType} is not registered."); - } - } - #endregion - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Machine/IMachine.cs.meta b/Packages/Character/Runtime/Machine/IMachine.cs.meta deleted file mode 100644 index 2bd2fbe..0000000 --- a/Packages/Character/Runtime/Machine/IMachine.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0cd74b3acde213f489a11a9e0ccd81e7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/MachineState.meta b/Packages/Character/Runtime/MachineState.meta deleted file mode 100644 index e88a771..0000000 --- a/Packages/Character/Runtime/MachineState.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a2af9ed6fc4426e49807173a25d3d2cb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/MachineState/IMachineState.cs b/Packages/Character/Runtime/MachineState/IMachineState.cs deleted file mode 100644 index 0258335..0000000 --- a/Packages/Character/Runtime/MachineState/IMachineState.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - /// - /// 状态接口 - /// - public abstract class IMachineState { - protected readonly IMachine machine; - - public IMachineState(IMachine machine) => this.machine = machine; - - /// 进入状态 - public abstract void Enter(); - /// 更新状态 - public abstract void Update(); - /// 退出状态 - public abstract void Exit(); - /// 触发状态 - public abstract void Trigger(); - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/MachineState/IMachineState.cs.meta b/Packages/Character/Runtime/MachineState/IMachineState.cs.meta deleted file mode 100644 index df122f3..0000000 --- a/Packages/Character/Runtime/MachineState/IMachineState.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 18d0a64357fbec04d8fbd51d45c88e4b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Movement.meta b/Packages/Character/Runtime/Movement.meta deleted file mode 100644 index 3c2befd..0000000 --- a/Packages/Character/Runtime/Movement.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a359f8431aa19b846b623d9dd066bae3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Movement/IMovement.cs b/Packages/Character/Runtime/Movement/IMovement.cs deleted file mode 100644 index 073da13..0000000 --- a/Packages/Character/Runtime/Movement/IMovement.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - /// - /// 运动控制器 - /// - public abstract class IMovement : MonoBehaviour { - /// 当前速度 - public abstract float CurrentSpeed { get; } - /// 当前方向 - public abstract Vector3 Direction { get; } - - /// 更新移动 - public abstract bool UpdateMove(Vector3 position, float moveSpeed); - /// 获取随机位置 - public abstract Vector3 RandomTargetPosition(); - /// 停止移动 - public abstract void StopMoving(); - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Movement/IMovement.cs.meta b/Packages/Character/Runtime/Movement/IMovement.cs.meta deleted file mode 100644 index 7629f89..0000000 --- a/Packages/Character/Runtime/Movement/IMovement.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d034bee659058394d8641aad1f9e7023 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Movement/MovementNavigation.cs b/Packages/Character/Runtime/Movement/MovementNavigation.cs deleted file mode 100644 index c089eef..0000000 --- a/Packages/Character/Runtime/Movement/MovementNavigation.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public class MovementNavigation : MonoBehaviour { - // Start is called before the first frame update - void Start() { - - } - - // Update is called once per frame - void Update() { - - } - } -} diff --git a/Packages/Character/Runtime/Movement/MovementNavigation.cs.meta b/Packages/Character/Runtime/Movement/MovementNavigation.cs.meta deleted file mode 100644 index 244ea81..0000000 --- a/Packages/Character/Runtime/Movement/MovementNavigation.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9eb06e286a5289a439f220c0a3656568 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/Movement/MovementStandard.cs b/Packages/Character/Runtime/Movement/MovementStandard.cs deleted file mode 100644 index e2be462..0000000 --- a/Packages/Character/Runtime/Movement/MovementStandard.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - /// - /// 标准运动实现 - /// - public class MovementStandard : IMovement { - public Vector3 position; - public float moveSpeed = 5.0f; // 最大移动速度 - public float acceleration = 20.0f; // 加速度 - public float steeringSpeed = 180.0f; // 加速度 - public float currentSpeed = 0.0f; // 当前速度 - public Vector3 direction; // 面向 - public CharacterController controller; - - private float _targetRotation = 0.0f; - private float _rotationVelocity; - private float _verticalVelocity; - - public override float CurrentSpeed => currentSpeed; - - public override Vector3 Direction => direction; - - private void Awake() => position = transform.position; - - private void Update() { - // 计算相对于世界坐标系的移动方向 - Vector3 moveDirection = (position - transform.position).normalized; - float distance = Vector3.Distance(transform.position, position); - - // float targetSpeed = _input.sprint ? SprintSpeed : MoveSpeed; - float targetSpeed = moveSpeed; - - // 注意:Vector2的==运算符使用近似值,因此不易出现浮点误差,并且比幅度便宜 - // 如果没有输入,将目标速度设置为0 - if (distance < 0.2f) { targetSpeed = 0.0f; } - - // 角色当前水平速度的参考 - //float currentHorizontalSpeed = new Vector3(controller.velocity.x, 0.0f, controller.velocity.z).magnitude; - - float speedOffset = 0.1f; - //float inputMagnitude = moveDirection.magnitude; - - // 加速或减速至目标速度 - if (currentSpeed < targetSpeed - speedOffset || currentSpeed > targetSpeed + speedOffset) { - // 产生弯曲的结果,而不是线性的结果,从而产生更有机的速度变化 - // 注意Lerp中的T是夹紧的,所以我们不需要夹紧我们的速度 - currentSpeed = Mathf.Lerp(currentSpeed, targetSpeed, Time.deltaTime * acceleration); - - // 四舍五入到小数点后3位 - //currentSpeed = Mathf.Round(currentSpeed * 1000f) / 1000f; - } - else { currentSpeed = targetSpeed; } - - // 注意:矢量2!=运算符使用近似值,因此不易出现浮点误差,而且比幅度便宜 - // 如果有移动输入,则在玩家移动时旋转玩家 - // if (moveDirection != Vector3.zero) { - // _targetRotation = Mathf.Atan2(moveDirection.x, moveDirection.z) * Mathf.Rad2Deg; - // float rotation = Mathf.SmoothDampAngle(transform.eulerAngles.y, _targetRotation, ref _rotationVelocity, steeringSpeed); - - // // 相对于相机位置旋转到面向输入方向 - // transform.rotation = Quaternion.Euler(0.0f, rotation, 0.0f); - // } - - - //Vector3 targetDirection = Quaternion.Euler(0.0f, _targetRotation, 0.0f) * Vector3.forward; - - // 移动角色 - // controller.Move(targetDirection.normalized * (currentSpeed * Time.deltaTime) + new Vector3(0.0f, _verticalVelocity, 0.0f) * Time.deltaTime); - - // 平滑加速和减速 - //currentSpeed = Mathf.MoveTowards(currentSpeed, moveSpeed, acceleration * Time.deltaTime); - - // 移动玩家 - //transform.Translate(moveDirection * currentSpeed * Time.deltaTime, Space.World); - - controller.Move(moveDirection * currentSpeed * Time.deltaTime); - - // 如果有移动输入,则更新玩家的朝向 - if (distance > 0.1f) { - Quaternion toRotation = Quaternion.LookRotation(moveDirection, Vector3.up); - transform.rotation = Quaternion.RotateTowards(transform.rotation, toRotation, moveSpeed * Time.deltaTime * steeringSpeed); - } - - // 计算转向向量 - Vector3 localMoveDirection = transform.InverseTransformDirection(moveDirection * currentSpeed); - localMoveDirection = localMoveDirection.normalized; - // 对localMoveDirection的x和z进行分类处理 - float moveX = Convert.ToInt32(localMoveDirection.x); - float moveZ = Convert.ToInt32(localMoveDirection.z); - direction = new Vector3(moveX, 0, moveZ); - } - - public override bool UpdateMove(Vector3 position, float moveSpeed) { - this.position = position; - this.moveSpeed = moveSpeed; - - // 如果到达目标位置,返回 true - float distance = Vector3.Distance(transform.position, position); - - return distance < 0.05f; - } - public override Vector3 RandomTargetPosition() { - float randomX = UnityEngine.Random.Range(-10.0f, 10.0f); - float randomZ = UnityEngine.Random.Range(-10.0f, 10.0f); - return transform.position + new Vector3(randomX, 0, randomZ); - } - public override void StopMoving() { - currentSpeed = 0; - } - } -} \ No newline at end of file diff --git a/Packages/Character/Runtime/Movement/MovementStandard.cs.meta b/Packages/Character/Runtime/Movement/MovementStandard.cs.meta deleted file mode 100644 index eedfa82..0000000 --- a/Packages/Character/Runtime/Movement/MovementStandard.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 699b617ae51a79a4390529e4e03405a2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/MuHua.Character.asmdef b/Packages/Character/Runtime/MuHua.Character.asmdef index d1e1e06..23f092d 100644 --- a/Packages/Character/Runtime/MuHua.Character.asmdef +++ b/Packages/Character/Runtime/MuHua.Character.asmdef @@ -1,9 +1,7 @@ { "name": "MuHua.Character", "rootNamespace": "", - "references": [ - "GUID:75469ad4d38634e559750d17036d5f7c" - ], + "references": [], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, diff --git a/Packages/Character/Runtime/EffectsLaunch.meta b/Packages/Character/Runtime/Presets.meta similarity index 77% rename from Packages/Character/Runtime/EffectsLaunch.meta rename to Packages/Character/Runtime/Presets.meta index 1b6e720..362fcc4 100644 --- a/Packages/Character/Runtime/EffectsLaunch.meta +++ b/Packages/Character/Runtime/Presets.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7cd21ba4756d406468a37fe882d097ae +guid: 8c36f49b360d4c048aef47715ebb0616 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Packages/Character/Runtime/Presets/KinesisIdle.cs b/Packages/Character/Runtime/Presets/KinesisIdle.cs new file mode 100644 index 0000000..b63c0b5 --- /dev/null +++ b/Packages/Character/Runtime/Presets/KinesisIdle.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MuHua { + /// + /// 空闲动作 + /// + public class KinesisIdle : IKinesis { + + public bool Transition(IKinesis kinesis) => true; + public void StartKinesis() { } + public void UpdateKinesis() { } + public void FinishKinesis() { } + + public void AnimationEffects() { } + public void AnimationEnd() { } + public void AnimationExit() { } + } +} diff --git a/Packages/Character/Runtime/Kinesis/KinesisIdle.cs.meta b/Packages/Character/Runtime/Presets/KinesisIdle.cs.meta similarity index 83% rename from Packages/Character/Runtime/Kinesis/KinesisIdle.cs.meta rename to Packages/Character/Runtime/Presets/KinesisIdle.cs.meta index 591d75c..2f6acd1 100644 --- a/Packages/Character/Runtime/Kinesis/KinesisIdle.cs.meta +++ b/Packages/Character/Runtime/Presets/KinesisIdle.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 190d2b1706b7e0b42b9700950c4e2c18 +guid: 99fdb0fe5f05b3b44bf010af88ab1f8f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/Character/Runtime/Presets/KinesisMove.cs b/Packages/Character/Runtime/Presets/KinesisMove.cs new file mode 100644 index 0000000..cbb1cc5 --- /dev/null +++ b/Packages/Character/Runtime/Presets/KinesisMove.cs @@ -0,0 +1,61 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MuHua { + /// + /// 移动动作 + /// + public class KinesisMove : IKinesis { + + public Vector3 position; + public Vector3 eulerAngles; + public Vector2 moveDirection;// 移动方向 + public KinesisMovement movement; + public KinesisController controller; + + public KinesisMove(KinesisController controller, Vector2 moveDirection) { + this.controller = controller; + this.moveDirection = moveDirection; + movement = controller.movement; + position = movement.transform.position; + eulerAngles = movement.transform.eulerAngles; + } + public KinesisMove(KinesisController controller, Vector2 moveDirection, Vector3 position, Vector3 eulerAngles) { + this.position = position; + this.eulerAngles = eulerAngles; + this.controller = controller; + this.moveDirection = moveDirection; + movement = controller.movement; + } + + public bool Transition(IKinesis kinesis) { + KinesisMove move = kinesis as KinesisMove; + if (move == null) { return true; } + position = move.position; + eulerAngles = move.eulerAngles; + moveDirection = move.moveDirection; + movement.transform.position = position; + movement.transform.eulerAngles = eulerAngles; + movement.SetDirection(moveDirection); + return false; + } + public void StartKinesis() { + movement.transform.position = position; + movement.transform.eulerAngles = eulerAngles; + movement.SetDirection(moveDirection); + } + public void UpdateKinesis() { + if (!movement.IsStop) { return; } + controller.TransitionKinesis(new KinesisIdle()); + } + public void FinishKinesis() { + movement.StopMovement(); + } + + public void AnimationEffects() { } + public void AnimationEnd() { } + public void AnimationExit() { } + + } +} diff --git a/Packages/Character/Runtime/Kinesis/KinesisMove.cs.meta b/Packages/Character/Runtime/Presets/KinesisMove.cs.meta similarity index 83% rename from Packages/Character/Runtime/Kinesis/KinesisMove.cs.meta rename to Packages/Character/Runtime/Presets/KinesisMove.cs.meta index 22faf69..b3e1b5a 100644 --- a/Packages/Character/Runtime/Kinesis/KinesisMove.cs.meta +++ b/Packages/Character/Runtime/Presets/KinesisMove.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7c4416dfc61926e439368a6fd3b26675 +guid: 5c1bd98cf0e078140ab99d637e398ed1 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/Character/Runtime/VisualField.meta b/Packages/Character/Runtime/VisualField.meta deleted file mode 100644 index 222698d..0000000 --- a/Packages/Character/Runtime/VisualField.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1c84ca502025179419c2b8afb29080aa -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/VisualField/VisualField.cs b/Packages/Character/Runtime/VisualField/VisualField.cs deleted file mode 100644 index 061f566..0000000 --- a/Packages/Character/Runtime/VisualField/VisualField.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public abstract class VisualField : MonoBehaviour { - - } -} diff --git a/Packages/Character/Runtime/VisualField/VisualField.cs.meta b/Packages/Character/Runtime/VisualField/VisualField.cs.meta deleted file mode 100644 index 9c3824c..0000000 --- a/Packages/Character/Runtime/VisualField/VisualField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e4d36e9e525a8a7429e5a7d9edf17cb2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/Character/Runtime/VisualField/VisualFieldStandard.cs b/Packages/Character/Runtime/VisualField/VisualFieldStandard.cs deleted file mode 100644 index 810c30c..0000000 --- a/Packages/Character/Runtime/VisualField/VisualFieldStandard.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace MuHua { - public abstract class VisualFieldStandard : VisualField { - - } -} diff --git a/Packages/Character/Runtime/VisualField/VisualFieldStandard.cs.meta b/Packages/Character/Runtime/VisualField/VisualFieldStandard.cs.meta deleted file mode 100644 index 9eb293a..0000000 --- a/Packages/Character/Runtime/VisualField/VisualFieldStandard.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3595d54d26ddd5c47b4d4a3025935ecb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: