diff options
author | chai <chaifix@163.com> | 2022-01-29 10:08:03 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-01-29 10:08:03 +0800 |
commit | 4d44695638dccbb648f5d781a0c5c40f813bb3e5 (patch) | |
tree | 312c1b0fa650ab5910e0b2542b8bc3c22f80086e /JamTools/Assets/JamTools/Scripts | |
parent | 43daf7b4654d69426ade3da5ab81960dd6faf065 (diff) |
+ walljump
Diffstat (limited to 'JamTools/Assets/JamTools/Scripts')
5 files changed, 146 insertions, 68 deletions
diff --git a/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/FPSCharacterController.cs b/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/FPSCharacterController.cs index a396ea0..1f40e34 100644 --- a/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/FPSCharacterController.cs +++ b/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/FPSCharacterController.cs @@ -67,8 +67,10 @@ namespace JamTools [Header("WallJump")]
[SerializeField] private float m_WallJumpForce = 1;
+ [SerializeField] private float m_WallJumpPower = 1000;
- [Header("ExtraGravity")]
+
+ [Header("ExtraGravity")]
[SerializeField] private Vector3 m_ExtraGravity;
#endregion
@@ -145,21 +147,21 @@ namespace JamTools m_MoveDirection = right * moveX + forward * moveZ;
- if (IsModuleActive(CharacterModule.WalkOnSlope))
- {
- if (m_GroundChecker.isOnGround)
- {
- RaycastHit hitInfo;
- if (Physics.Raycast(m_GroundChecker.foot.position, Vector3.down, out hitInfo))
- {
- Vector3 normal = hitInfo.normal;
- m_MoveDirection = Vector3.ProjectOnPlane(m_MoveDirection, normal);
- GizmosHandle.Instance.DoGizmos(() => {
- Gizmos.DrawLine(hitInfo.point + new Vector3(0, 0.1f, 0), hitInfo.point + m_MoveDirection);
- });
- }
- }
- }
+ //if (IsModuleActive(CharacterModule.WalkOnSlope))
+ //{
+ // if (m_GroundChecker.isOnGround)
+ // {
+ // RaycastHit hitInfo;
+ // if (Physics.Raycast(m_GroundChecker.foot.position, Vector3.down, out hitInfo))
+ // {
+ // Vector3 normal = hitInfo.normal;
+ // m_MoveDirection = Vector3.ProjectOnPlane(m_MoveDirection, normal);
+ // GizmosHandle.Instance.DoGizmos(() => {
+ // Gizmos.DrawLine(hitInfo.point + new Vector3(0, 0.1f, 0), hitInfo.point + m_MoveDirection);
+ // });
+ // }
+ // }
+ //}
m_MoveDirection = m_MoveDirection.normalized;
}
@@ -176,8 +178,9 @@ namespace JamTools Vector3 velocity = new Vector3(m_MoveDirection.x * Time.deltaTime * m_MoveSpeed, vy, m_MoveDirection.z * Time.deltaTime * m_MoveSpeed);
float t = m_MoveSmoothWithTime ? Time.deltaTime : 1;
- m_Rigidbody.velocity = Vector3.Lerp(m_Rigidbody.velocity, velocity, m_MoveSmooth * t * m_MoveSmoothMultiplier);
- }
+ //m_Rigidbody.velocity = Vector3.Lerp(m_Rigidbody.velocity, velocity, m_MoveSmooth * t * m_MoveSmoothMultiplier);
+ m_Rigidbody.AddForce(velocity * m_MoveSmoothMultiplier, ForceMode.VelocityChange);
+ }
void MoveInAirUpdate()
{
@@ -190,8 +193,7 @@ namespace JamTools float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical"); - m_MoveDirection = transform.right * moveX + transform.forward * moveZ;
- m_MoveDirection = m_MoveDirection.normalized;
+ m_MoveDirection = Vector3.ClampMagnitude(transform.right * moveX + transform.forward * moveZ, 1);
}
void MoveInAirFixedUpdate()
@@ -271,16 +273,27 @@ namespace JamTools void WallJump()
{
- if (!IsModuleActive(CharacterModule.WallJump))
- return;
-
- if (!m_WallChecker.IsOnWall)
- return;
-
- if(Input.GetButtonDown("Jump"))
- {
- }
- }
+ if (!IsModuleActive(CharacterModule.WallJump))
+ return;
+
+ if (!m_WallChecker.IsOnWall)
+ return;
+
+ if (m_GroundChecker.isOnGround)
+ return;
+
+ if (Input.GetButtonDown("Jump"))
+ {
+ Vector3 poc;
+ if (m_WallChecker.GetCollisionPoint(out poc))
+ {
+ Vector3 dir = Vector3.ClampMagnitude(transform.position - poc, 1f);
+ Vector3 wallJumpDirection = new Vector3(dir.x, 1, dir.z);
+ m_Rigidbody.velocity = Vector3.zero;
+ m_Rigidbody.AddForce(wallJumpDirection * m_WallJumpPower);
+ }
+ }
+ }
void WallRun()
{
diff --git a/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs b/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs index 946c326..8137670 100644 --- a/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs +++ b/JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs @@ -2,45 +2,73 @@ using System.Collections; using System.Collections.Generic;
using UnityEngine;
-public class WallChecker : MonoBehaviour
+namespace JamTools
{
- private bool m_IsOnWall;
- public bool IsOnWall
- {
- get
- {
- return m_IsOnWall;
- }
- }
-
- private List<Collider> m_Colliders = new List<Collider>();
-
- private void Update()
- {
- if (m_IsOnWall && m_Colliders.Count == 0)
- {
- m_IsOnWall = false;
- }
- }
-
- private void OnTriggerEnter(Collider other)
- {
- m_IsOnWall = true;
-
- m_Colliders.Add(other);
- }
-
- private void OnTriggerStay(Collider other)
- {
- }
-
- private void OnTriggerExit(Collider other)
- {
- if(m_Colliders.Contains(other))
- {
- m_Colliders.Remove(other);
- }
- }
+
+ public class WallChecker : MonoBehaviour
+ {
+
+ private bool m_IsOnWall;
+ public bool IsOnWall
+ {
+ get
+ {
+ return m_IsOnWall;
+ }
+ }
+
+ private List<Collider> m_Colliders = new List<Collider>();
+
+ private void Update()
+ {
+ if (m_IsOnWall && m_Colliders.Count == 0)
+ {
+ m_IsOnWall = false;
+ }
+ }
+
+ public bool GetCollisionPoint(out Vector3 point)
+ {
+ bool result = false;
+ point = Vector3.zero;
+ if (m_Colliders.Count > 0)
+ {
+ float dist = 100f;
+ for (int i = 0; i < m_Colliders.Count; ++i)
+ {
+ Collider col = m_Colliders[i];
+ Vector3 p = ColliderUtility.FindClosestPoint(col, transform.position);
+ if (Vector3.Distance(p, transform.position) <= dist)
+ {
+ dist = Vector3.Distance(p, transform.position);
+ point = p;
+ result = true;
+ }
+ }
+ }
+ return result;
+ }
+
+ private void OnTriggerEnter(Collider other)
+ {
+ m_IsOnWall = true;
+
+ m_Colliders.Add(other);
+ }
+
+ private void OnTriggerStay(Collider other)
+ {
+ }
+
+ private void OnTriggerExit(Collider other)
+ {
+ if (m_Colliders.Contains(other))
+ {
+ m_Colliders.Remove(other);
+ }
+ }
+
+ }
}
diff --git a/JamTools/Assets/JamTools/Scripts/Props.meta b/JamTools/Assets/JamTools/Scripts/Props.meta new file mode 100644 index 0000000..2c6be10 --- /dev/null +++ b/JamTools/Assets/JamTools/Scripts/Props.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e5567d87e40a064b9defd283282150c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs b/JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs new file mode 100644 index 0000000..0438b58 --- /dev/null +++ b/JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class SliderDoor : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs.meta b/JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs.meta new file mode 100644 index 0000000..45b033f --- /dev/null +++ b/JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dc113f39388b8d4a8f1fb38cbf5cbd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |