float RayCastCallbackWrapper(ref RayCastInput input, int proxyId) { object userData = _contactManager._broadPhase.GetUserData(proxyId); FixtureProxy proxy = (FixtureProxy)userData; Fixture fixture = proxy.fixture; int index = proxy.childIndex; RayCastOutput output; bool hit = fixture.RayCast(out output, ref input, index); if (hit) { float fraction = output.fraction; Vector2 point = (1.0f - fraction) * input.p1 + fraction * input.p2; return(_rayCastCallback(fixture, point, output.normal, fraction)); } return(input.maxFraction); }