aboutsummaryrefslogtreecommitdiff
path: root/JamTools/Assets/JamTools/Scripts
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-01-29 10:08:03 +0800
committerchai <chaifix@163.com>2022-01-29 10:08:03 +0800
commit4d44695638dccbb648f5d781a0c5c40f813bb3e5 (patch)
tree312c1b0fa650ab5910e0b2542b8bc3c22f80086e /JamTools/Assets/JamTools/Scripts
parent43daf7b4654d69426ade3da5ab81960dd6faf065 (diff)
+ walljump
Diffstat (limited to 'JamTools/Assets/JamTools/Scripts')
-rw-r--r--JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/FPSCharacterController.cs73
-rw-r--r--JamTools/Assets/JamTools/Scripts/Character/FPSCharacterController/WallChecker.cs104
-rw-r--r--JamTools/Assets/JamTools/Scripts/Props.meta8
-rw-r--r--JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs18
-rw-r--r--JamTools/Assets/JamTools/Scripts/Props/SliderDoor.cs.meta11
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: