diff options
| author | chai <chaifix@163.com> | 2022-07-02 22:47:33 +0800 | 
|---|---|---|
| committer | chai <chaifix@163.com> | 2022-07-02 22:47:33 +0800 | 
| commit | 9f221215168e4b3693806f254cd5ac927608fbe4 (patch) | |
| tree | 249ab524a5ccb68cdff343faa68196b18d4e0d90 | |
| parent | 9e1edb36d6471a139a30e1c0fc4ce1adc133a308 (diff) | |
3 files changed, 94 insertions, 40 deletions
| diff --git a/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scenes/FPSCharacterController.unity b/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scenes/FPSCharacterController.unity index d112fce..dd79a9e 100644 --- a/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scenes/FPSCharacterController.unity +++ b/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scenes/FPSCharacterController.unity @@ -749,7 +749,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17984 +  m_Name: pb_Mesh20316    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -1696,7 +1696,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17996 +  m_Name: pb_Mesh20328    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -2226,8 +2226,8 @@ Transform:    m_PrefabAsset: {fileID: 0}    m_GameObject: {fileID: 594374152}    m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} -  m_LocalPosition: {x: 17.06, y: -1.3, z: 32.52} -  m_LocalScale: {x: 2, y: 1, z: 2} +  m_LocalPosition: {x: 17.06, y: -1.35, z: 32.52} +  m_LocalScale: {x: 2, y: 0.5, z: 2}    m_Children: []    m_Father: {fileID: 1833817345}    m_RootOrder: 7 @@ -2300,7 +2300,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17914 +  m_Name: pb_Mesh20246    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -7230,7 +7230,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17676 +  m_Name: pb_Mesh20008    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -7394,7 +7394,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh18080 +  m_Name: pb_Mesh20412    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -7740,7 +7740,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17816 +  m_Name: pb_Mesh20148    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -7935,7 +7935,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh18046 +  m_Name: pb_Mesh20378    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -8099,7 +8099,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17828 +  m_Name: pb_Mesh20160    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -8944,7 +8944,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17960 +  m_Name: pb_Mesh20292    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -9114,16 +9114,36 @@ PrefabInstance:        value: 5        objectReference: {fileID: 0}      - target: {fileID: 7739210602112578966, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3} +      propertyPath: m_Foot +      value:  +      objectReference: {fileID: 2083795382} +    - target: {fileID: 7739210602112578966, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3}        propertyPath: m_Camera        value:         objectReference: {fileID: 685442961} +    - target: {fileID: 7739210602112578966, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3} +      propertyPath: m_StairMaxHeight +      value: 0.6 +      objectReference: {fileID: 0} +    - target: {fileID: 7739210602112578966, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3} +      propertyPath: m_StairCheckDistance +      value: 0.6 +      objectReference: {fileID: 0} +    - target: {fileID: 7739210602112578966, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3} +      propertyPath: m_StairCheckDeltaHeight +      value: 0.35 +      objectReference: {fileID: 0} +    - target: {fileID: 7739210602112578966, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3} +      propertyPath: m_StairClusterCheckCount +      value: 5 +      objectReference: {fileID: 0}      - target: {fileID: 7739210602112578984, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3}        propertyPath: m_RootOrder        value: 11        objectReference: {fileID: 0}      - target: {fileID: 7739210602112578984, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3}        propertyPath: m_LocalPosition.x -      value: 7.2635603 +      value: 19.4        objectReference: {fileID: 0}      - target: {fileID: 7739210602112578984, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3}        propertyPath: m_LocalPosition.y @@ -9131,7 +9151,7 @@ PrefabInstance:        objectReference: {fileID: 0}      - target: {fileID: 7739210602112578984, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3}        propertyPath: m_LocalPosition.z -      value: -0.6 +      value: 24.3        objectReference: {fileID: 0}      - target: {fileID: 7739210602112578984, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3}        propertyPath: m_LocalRotation.w @@ -14315,7 +14335,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17788 +  m_Name: pb_Mesh20120    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -14591,7 +14611,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17708 +  m_Name: pb_Mesh20040    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -14755,7 +14775,7 @@ Mesh:    m_CorrespondingSourceObject: {fileID: 0}    m_PrefabInstance: {fileID: 0}    m_PrefabAsset: {fileID: 0} -  m_Name: pb_Mesh17972 +  m_Name: pb_Mesh20304    serializedVersion: 10    m_SubMeshes:    - serializedVersion: 2 @@ -15939,6 +15959,11 @@ Rigidbody:    m_Interpolate: 0    m_Constraints: 0    m_CollisionDetection: 0 +--- !u!4 &2083795382 stripped +Transform: +  m_CorrespondingSourceObject: {fileID: 6879717249872257464, guid: 8ec8551d12bf0c649a5ba9d04f879de5, type: 3} +  m_PrefabInstance: {fileID: 1198588178} +  m_PrefabAsset: {fileID: 0}  --- !u!1 &2137460919  GameObject:    m_ObjectHideFlags: 0 diff --git a/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/FPSCharacterController.cs b/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/FPSCharacterController.cs index 6f95732..66040f4 100644 --- a/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/FPSCharacterController.cs +++ b/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/FPSCharacterController.cs @@ -86,9 +86,11 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity          [SerializeField] private Vector3 m_ExtraGravity;  		[Header("WalkOnStairs")] -		[SerializeField] private Transform m_Lower; -		[SerializeField] private Transform m_Upper; -		[SerializeField] private float m_StepSmooth; +		[SerializeField] private Transform m_Foot; +		[SerializeField] private float m_StairMaxHeight = 0.35f; // 最大允许跨上的高度 +		[SerializeField] private int m_StairClusterCheckCount = 10; // 最后一个是上限 +		[SerializeField] private float m_StairCheckDistance = 2f; +		private float m_StairCheckDeltaHeight { get { return m_StairMaxHeight / m_StairClusterCheckCount; } }  		#endregion @@ -159,6 +161,8 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity  				return;  			} +			m_Rigidbody.useGravity = m_GroundChecker.isOnGround && !m_GroundChecker.isOnSlope; +  			float moveX = Input.GetAxisRaw("Horizontal");              float moveZ = Input.GetAxisRaw("Vertical"); @@ -167,7 +171,7 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity              Vector3 dir = right * moveX + forward * moveZ; -			if(dir.magnitude == 0) +			if (dir.magnitude == 0)  			{  				m_MoveDirection = Vector3.zero;  				return; @@ -193,19 +197,11 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity  								Gizmos.DrawLine(hitInfo.point + new Vector3(0, 0.1f, 0), hitInfo.point + dir * 3f);  							});  							m_Rigidbody.useGravity = false; -							Debug.Log("On Slope");  						}  					}                  } -				else -				{ -					m_Rigidbody.useGravity = true; -				} -  			} -			Debug.Log(m_MoveDirection); -  			m_MoveDirection = dir;  		} @@ -217,7 +213,6 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity              if (!m_GroundChecker.isOnGround)                  return; -            //Vector3 velocity = new Vector3(.x * Time.deltaTime * m_MoveSpeed, , m_MoveDirection.z * Time.deltaTime * m_MoveSpeed);  			Vector3 velocity = m_MoveDirection * Time.fixedDeltaTime * m_MoveSpeed;  			Vector3 rigidVel = m_Rigidbody.velocity; @@ -393,21 +388,51 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity              m_Rigidbody.AddForce(m_ExtraGravity, ForceMode.Acceleration);          } +		/// <summary> +		/// 上阶梯,通过一些列簇cluster检测 +		/// </summary>  		void WalkOnStairs()  		{ -			//int layermask = ~(1 << LayerMask.NameToLayer("Player")); +			if(m_GroundChecker.isOnSlope) +			{ +				return; +			} -			//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); -			//	} -			//} -		} +			if (m_MoveDirection.magnitude == 0) +			{ +				return; +			} + +			int check = -1; +			for(int i = 0; i < m_StairClusterCheckCount; ++i) +			{ +				Vector3 origin = m_Foot.position + new Vector3(0, i*m_StairCheckDeltaHeight, 0); + +				GizmosHandle.Instance.DoGizmos(() => +				{ +					Gizmos.DrawLine(origin, origin + Vector3.forward * m_StairCheckDistance); +				}); + +				if (!Physics.Raycast(origin, m_MoveDirection, m_StairCheckDistance)) +				{ +					break; +				} +				check = i; +			} + +			if (check != -1) +			{ +				Debug.Log(check); +			} + +			if (check < m_StairClusterCheckCount - 1) // OnStair +			{ +				Vector3 pos = m_Rigidbody.position; +				pos.y = Mathf.Lerp(pos.y, (check + 1)* m_StairCheckDeltaHeight + pos.y, 0.25f); +				m_Rigidbody.position = pos; +			} +		}  		void SetCamera ()          { diff --git a/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/GroundChecker.cs b/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/GroundChecker.cs index 01538e1..240c61a 100644 --- a/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/GroundChecker.cs +++ b/JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/GroundChecker.cs @@ -40,6 +40,10 @@ namespace JamUtils.FirstPersonCharacterController.RigidbodyVelocity  		{  			get  			{ +				if(!isOnGround) +				{ +					return false; +				}  				RaycastHit hitInfo;  				if (Physics.Raycast(foot.position, Vector3.down, out hitInfo))  				{ | 
