summaryrefslogtreecommitdiff
path: root/ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-10-18 10:16:32 +0800
committerchai <215380520@qq.com>2023-10-18 10:16:32 +0800
commit4ccd4bc6d126e0e0f51a50aa10c85b9bf48b1210 (patch)
tree9ac931da935b59a8d7c57ff0b6d90b88a0e5a479 /ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs
+ init
Diffstat (limited to 'ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs')
-rw-r--r--ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs b/ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs
new file mode 100644
index 0000000..055f1ac
--- /dev/null
+++ b/ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CheckForGroundCollision : MonoBehaviour
+{
+ [NonSerialized] public bool isGrounded;
+ [NonSerialized] public Vector3 collisionPosition;
+ [NonSerialized] public Vector3 collisionNormal;
+ [NonSerialized] public Collider collider;
+
+ private bool sensorGround;
+
+ private void FixedUpdate()
+ {
+ // 根据上一次物理模拟(Physics Update)结果设置isGround参数
+ if(!sensorGround)
+ {
+ isGrounded = false;
+ }
+ sensorGround = false;
+ }
+
+ void Collide(Collision collision)
+ {
+ if(collision.transform.root == transform.root) // 自己碰撞自己
+ {
+ return;
+ }
+
+ float surfaceAngel = Vector3.Angle(Vector3.up, collision.contacts[0].normal);
+
+ collider = collision.collider;
+
+ if (surfaceAngel > 75f) // wall
+ {
+
+ }
+ else // ground
+ {
+ sensorGround = true;
+ isGrounded = true;
+ collisionPosition = collision.contacts[0].point;
+ collisionNormal = collision.contacts[0].normal;
+ }
+ }
+
+ public void OnCollisionEnter(Collision collision)
+ {
+ Collide(collision);
+ }
+
+ public void OnCollisionStay(Collision collision)
+ {
+ Collide(collision);
+ }
+
+}