diff options
Diffstat (limited to 'ActiveRagdoll/Assets/TABG/Scripts/CollisionChecker.cs')
-rw-r--r-- | ActiveRagdoll/Assets/TABG/Scripts/CollisionChecker.cs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/ActiveRagdoll/Assets/TABG/Scripts/CollisionChecker.cs b/ActiveRagdoll/Assets/TABG/Scripts/CollisionChecker.cs new file mode 100644 index 0000000..75741ab --- /dev/null +++ b/ActiveRagdoll/Assets/TABG/Scripts/CollisionChecker.cs @@ -0,0 +1,72 @@ +using Rigging.Data; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Rigging +{ + + public class CollisionChecker : MonoBehaviour + { + public Player player; + + private Transform head + { + get + { + return player.body.head.transform; + } + } + + private Transform hip + { + get + { + return player.body.hip.transform; + } + } + + private StandingDataHandler data; + + public bool active = true; + + public float sinceGrounded = 0; // 离地开始算的时间 + + public float allowedSteepnesAngle = 60f; + + private void Start() + { + player = GetComponentInParent<Player>(); + + data = player.status.standingData; + } + + private void Update() + { + sinceGrounded += Time.deltaTime; + } + + private void OnCollisionStay(Collision collision) + { + Collide(collision); + } + + private void OnCollisionEnter(Collision collision) + { + Collide(collision); + } + + private void Collide(Collision collision) + { + if (active && Vector3.Angle(Vector3.up, collision.contacts[0].normal) < allowedSteepnesAngle) + { + if ((bool)data) + { + data.TouchGround(Mathf.Abs(hip.position.y - collision.contacts[0].point.y), collision.contacts[0].normal); + } + sinceGrounded = 0f; + } + } + } + +} |