aboutsummaryrefslogtreecommitdiff
path: root/Assets/Scripts/PlayerLocomotion.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/PlayerLocomotion.cs')
-rw-r--r--Assets/Scripts/PlayerLocomotion.cs25
1 files changed, 23 insertions, 2 deletions
diff --git a/Assets/Scripts/PlayerLocomotion.cs b/Assets/Scripts/PlayerLocomotion.cs
index aaa0c12..9f058b0 100644
--- a/Assets/Scripts/PlayerLocomotion.cs
+++ b/Assets/Scripts/PlayerLocomotion.cs
@@ -9,6 +9,16 @@ namespace DS
{
public class PlayerLocomotion : MonoBehaviour
{
+ // 是否使用根动画
+ [Range(0, 1)] public float rootMotionBlending = 1f;
+
+ public bool usingRootMotion
+ {
+ get => rootMotionBlending > 0.5f;
+ set => rootMotionBlending = value ? 0 : 1;
+ }
+
+ [HideInInspector] public Vector3 rootMotion;
private Transform _cameraObject; //存储Camera的位置
private InputHandler _inputHandler;
private Vector3 _moveDirection;
@@ -35,6 +45,16 @@ namespace DS
private void Update()
{
+ UpdateCharacterMovement();
+ }
+
+ private void FixedUpdate()
+ {
+
+ }
+
+ private void UpdateCharacterMovement()
+ {
float delta = Time.deltaTime;
_inputHandler.TickInput(delta);
@@ -45,8 +65,9 @@ namespace DS
float speed = movementSpeed;
_moveDirection *= speed;
-
- Vector3 projectedVelocity = Vector3.ProjectOnPlane(_moveDirection, _normalVector);
+
+ var baseVelocity = Vector3.Lerp(rootMotion, _moveDirection, rootMotionBlending);
+ Vector3 projectedVelocity = Vector3.ProjectOnPlane(baseVelocity, _normalVector);
rigidbody.velocity = projectedVelocity;
animatorHandler.UpdateAnimatorValues(_inputHandler.moveAmount,0);