From bdd4f322fd39485820cdf5c1fbdc6b712e81084b Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 20 Feb 2022 17:06:18 +0800 Subject: + materials --- .../Scripts/FPSCharacterController.cs | 50 ++++++++++++++++++---- 1 file changed, 42 insertions(+), 8 deletions(-) (limited to 'JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs') diff --git a/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs b/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs index cf8928d..db0cb20 100644 --- a/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs +++ b/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs @@ -83,9 +83,14 @@ namespace JamUtils [Header("ExtraGravity")] [SerializeField] private Vector3 m_ExtraGravity; - #endregion + [Header("WalkOnStairs")] + [SerializeField] private Transform m_Lower; + [SerializeField] private Transform m_Upper; + [SerializeField] private float m_StepSmooth; - public Func checkHit; + #endregion + + public Func checkHit; public Action shootTarget; private Rigidbody m_Rigidbody; @@ -176,8 +181,8 @@ namespace JamUtils dir = dir.normalized; - m_MoveDirection = Vector3.Slerp(m_MoveDirection, dir, 1f); - } + m_MoveDirection = Vector3.Slerp(m_MoveDirection, dir, 1f); + } void MoveAroundFixedUpdate() { @@ -190,10 +195,22 @@ namespace JamUtils float vy = m_Rigidbody.velocity.y; Vector3 velocity = new Vector3(m_MoveDirection.x * Time.deltaTime * m_MoveSpeed, vy, m_MoveDirection.z * Time.deltaTime * m_MoveSpeed); - m_Rigidbody.velocity = Vector3.Slerp(m_Rigidbody.velocity, velocity, m_MoveSmooth); + Vector3 rigidVel = m_Rigidbody.velocity; + + // 对速度Slerp比较危险 + //if (Vector3.Angle(rigidVel, velocity) > 90) + //{ + // m_Rigidbody.velocity = Vector3.Lerp(rigidVel, velocity, m_MoveSmooth); + //} + //else + //{ + // m_Rigidbody.velocity = Vector3.Slerp(rigidVel, velocity, m_MoveSmooth); + //} + + m_Rigidbody.velocity = Vector3.Lerp(rigidVel, velocity, m_MoveSmooth); } - void MoveInAirUpdate() + void MoveInAirUpdate() { if (!IsModuleActive(CharacterModule.MoveInAir)) return; @@ -352,7 +369,23 @@ namespace JamUtils m_Rigidbody.AddForce(m_ExtraGravity, ForceMode.Acceleration); } - void SetCamera () + void WalkOnStairs() + { + //int layermask = ~(1 << LayerMask.NameToLayer("Player")); + + //RaycastHit hitLower; + //if (Physics.Raycast(m_Lower.position, transform.TransformDirection(Vector3.forward), out hitLower, 0.6f, layermask)) + //{ + // RaycastHit hitUpper; + // if (!Physics.Raycast(m_Upper.position, transform.TransformDirection(Vector3.forward), out hitUpper, 0.7f, layermask)) + // { + // m_Rigidbody.position += new Vector3(0f, m_StepSmooth * Time.deltaTime, 0f); + // } + //} + } + + + void SetCamera () { m_Camera.SetCameraPositionAndRotation(m_Eye); } @@ -385,7 +418,8 @@ namespace JamUtils private void FixedUpdate() { - MoveAroundFixedUpdate(); + WalkOnStairs(); + MoveAroundFixedUpdate(); MoveInAirFixedUpdate(); DodgeFixed(); ExtraGravity(); -- cgit v1.1-26-g67d0