aboutsummaryrefslogtreecommitdiff
path: root/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs')
-rw-r--r--JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/FPSCharacterController.cs50
1 files changed, 42 insertions, 8 deletions
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<RaycastHit, bool> checkHit;
+ #endregion
+
+ public Func<RaycastHit, bool> checkHit;
public Action<Vector3, Transform> 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();