public unsafe void RigidBodyCastRayTest() { Physics.RigidBody rigidbody = Unity.Physics.RigidBody.Zero; const float size = 1.0f; const float convexRadius = 0.0f; var rayStartOK = new float3(-10, -10, -10); var rayEndOK = new float3(10, 10, 10); var rayStartFail = new float3(-10, 10, -10); var rayEndFail = new float3(10, 10, 10); rigidbody.Collider = (Collider *)BoxCollider.Create(new BoxGeometry { Center = float3.zero, Orientation = quaternion.identity, Size = size, BevelRadius = convexRadius }).GetUnsafePtr(); var raycastInput = new RaycastInput(); var closestHit = new RaycastHit(); var allHits = new NativeList <RaycastHit>(Allocator.Temp); // OK case : Ray hits the box collider raycastInput.Start = rayStartOK; raycastInput.End = rayEndOK; raycastInput.Filter = CollisionFilter.Default; Assert.IsTrue(rigidbody.CastRay(raycastInput)); Assert.IsTrue(rigidbody.CastRay(raycastInput, out closestHit)); Assert.IsTrue(rigidbody.CastRay(raycastInput, ref allHits)); // Fail Case : wrong direction raycastInput.Start = rayStartFail; raycastInput.End = rayEndFail; Assert.IsFalse(rigidbody.CastRay(raycastInput)); Assert.IsFalse(rigidbody.CastRay(raycastInput, out closestHit)); Assert.IsFalse(rigidbody.CastRay(raycastInput, ref allHits)); }
public unsafe void RigidBodyCastRayTest() { Physics.RigidBody rigidbody = Unity.Physics.RigidBody.Zero; const float size = 1.0f; const float convexRadius = 1.0f; var rayStartOK = new float3(-10, -10, -10); var rayEndOK = new float3(10, 10, 10); var rayStartFail = new float3(-10, 10, -10); var rayEndFail = new float3(10, 10, 10); rigidbody.Collider = (Collider *)BoxCollider.Create(float3.zero, quaternion.identity, new float3(size), convexRadius).GetUnsafePtr(); var raycastInput = new RaycastInput(); var closestHit = new RaycastHit(); var allHits = new NativeList <RaycastHit>(Allocator.Temp); // OK case : Ray hits the box collider float3 rayDir = rayEndOK - rayStartOK; raycastInput.Ray.Origin = rayStartOK; raycastInput.Ray.Direction = rayDir; raycastInput.Filter = CollisionFilter.Default; Assert.IsTrue(rigidbody.CastRay(raycastInput)); Assert.IsTrue(rigidbody.CastRay(raycastInput, out closestHit)); Assert.IsTrue(rigidbody.CastRay(raycastInput, ref allHits)); // Fail Case : wrong direction rayDir = rayEndFail - rayStartFail; raycastInput.Ray.Origin = rayStartFail; raycastInput.Ray.Direction = rayDir; Assert.IsFalse(rigidbody.CastRay(raycastInput)); Assert.IsFalse(rigidbody.CastRay(raycastInput, out closestHit)); Assert.IsFalse(rigidbody.CastRay(raycastInput, ref allHits)); }