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); } }