diff options
author | chai <chaifix@163.com> | 2022-02-18 14:38:20 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-02-18 14:38:20 +0800 |
commit | 63795c45af9ecca5aea36fbe291b18fcd9fb9b7d (patch) | |
tree | 60d811d8a0b1944ab32d24aa28394183b82cadeb /JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/WallChecker.cs | |
parent | a41c8da0787e0285d4c5b16a5cf5bc3e7a34f521 (diff) |
*rename folder name
Diffstat (limited to 'JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/WallChecker.cs')
-rw-r--r-- | JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/WallChecker.cs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/WallChecker.cs b/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/WallChecker.cs new file mode 100644 index 0000000..8137670 --- /dev/null +++ b/JamHelper/Assets/JamUtils/FPSControllerVelocity/Scripts/WallChecker.cs @@ -0,0 +1,74 @@ +using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace JamTools
+{
+
+
+ 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);
+ }
+ }
+
+ }
+
+}
|