From 41def44651b5a7c9e917395fad5e7b480640a3a2 Mon Sep 17 00:00:00 2001 From: SmallFox <2806143047@qq.com> Date: Thu, 14 May 2026 21:17:29 +0800 Subject: Movement完工 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 写完了移动,准备开工相机视角 --- Assets/Scripts/PlayerLocomotion.cs | 91 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Assets/Scripts/PlayerLocomotion.cs (limited to 'Assets/Scripts/PlayerLocomotion.cs') diff --git a/Assets/Scripts/PlayerLocomotion.cs b/Assets/Scripts/PlayerLocomotion.cs new file mode 100644 index 0000000..686595d --- /dev/null +++ b/Assets/Scripts/PlayerLocomotion.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Unity.Mathematics; +using UnityEngine; + + +namespace DS +{ + public class PlayerLocomotion : MonoBehaviour + { + private Transform _cameraObject; //存储Camera的位置 + private InputHandler _inputHandler; + private Vector3 _moveDirection; + + [HideInInspector] public Transform myTransform; + [HideInInspector] public AnimatorHandler animatorHandler; + + public new Rigidbody rigidbody; + public GameObject normalCamera; //引用Camera + + + [Header("Stats")] + [SerializeField] private float movementSpeed = 5; + [SerializeField] private float rotationSpeed = 10; + private void Start() + { + rigidbody = GetComponent(); + _inputHandler = GetComponent(); + animatorHandler = GetComponentInChildren(); + _cameraObject = Camera.main.transform; + myTransform = transform; + animatorHandler.Initialize(); + } + + private void Update() + { + float delta = Time.deltaTime; + _inputHandler.TickInput(delta); + + _moveDirection = _cameraObject.forward * _inputHandler.vertical; + _moveDirection += _cameraObject.right * _inputHandler.horizontal; + _moveDirection.Normalize(); + + float speed = movementSpeed; + _moveDirection *= speed; + + Vector3 projectedVelocity = Vector3.ProjectOnPlane(_moveDirection, _normalVector); + rigidbody.velocity = projectedVelocity; + + animatorHandler.UpdateAnimatorValues(_inputHandler.moveAmount,0); + + if (animatorHandler.canRotate) + { + HandleRotation(delta); + } + } + + #region Movement + + private Vector3 _normalVector; + private Vector3 _targetPosition; + + private void HandleRotation(float delta) + { + Vector3 targetDir = Vector3.zero; + float moveOverride = _inputHandler.moveAmount; + + targetDir = _cameraObject.forward * _inputHandler.vertical; + targetDir += _cameraObject.right * _inputHandler.horizontal; + + targetDir.Normalize(); + targetDir.y = 0; + + if (targetDir == Vector3.zero) + { + targetDir = myTransform.forward; + } + + float rs = rotationSpeed; + Quaternion tr = Quaternion.LookRotation(targetDir); + Quaternion targetRotation = Quaternion.Slerp(myTransform.rotation, tr, rs * delta); + + myTransform.rotation = targetRotation; + } + + + #endregion + } +} + -- cgit