aboutsummaryrefslogtreecommitdiff
path: root/JamHelper/Assets
diff options
context:
space:
mode:
Diffstat (limited to 'JamHelper/Assets')
-rw-r--r--JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scenes/FPSCharacterController.unity57
-rw-r--r--JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/FPSCharacterController.cs73
-rw-r--r--JamHelper/Assets/JamHelper/JamUtils/FirstPersonCharacterController/Rigidbody/MoveByVelocity/Scripts/GroundChecker.cs4
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))
{