From 4ccd4bc6d126e0e0f51a50aa10c85b9bf48b1210 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Wed, 18 Oct 2023 10:16:32 +0800 Subject: + init --- .../Assets/Scripts/CheckForGroundCollision.cs | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs (limited to 'ActiveRagdoll/Assets/Scripts/CheckForGroundCollision.cs') 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); + } + +} -- cgit v1.1-26-g67d0