private void OnCollisionExit2D(Collision2D collision)
        {
            if ((1 << collision.gameObject.layer & _groundMask) == 0)
            {
                return;
            }

            touchedObjects.Remove(collision.collider);
            if (touchedObjects.Count == 0)
            {
                OnLandingStateChanged?.Invoke(this, new LandingEventArgs(LandingState.Airborne, LandingState.OnGround));
            }
        }
        private void OnCollisionEnter2D(Collision2D collision)
        {
            if ((1 << collision.gameObject.layer & _groundMask) == 0)
            {
                return;
            }
            if (!TestContactPoints(collision.contacts))
            {
                return;
            }

            touchedObjects.Add(collision.collider);
            if (touchedObjects.Count == 1)
            {
                OnLandingStateChanged?.Invoke(this, new LandingEventArgs(LandingState.OnGround, LandingState.Airborne));
            }
        }