diff options
author | chai <215380520@qq.com> | 2023-10-18 10:16:32 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-10-18 10:16:32 +0800 |
commit | 4ccd4bc6d126e0e0f51a50aa10c85b9bf48b1210 (patch) | |
tree | 9ac931da935b59a8d7c57ff0b6d90b88a0e5a479 /ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs |
+ init
Diffstat (limited to 'ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs')
-rw-r--r-- | ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs | 59 |
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); + } + +} |