diff options
Diffstat (limited to 'JamHelper/Assets')
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)) { |