public static bool RayCast(Fix64Vec3 start, Fix64Vec3 end, int mask, out PRaycastHit3D raycastHit3D) { if (!initialized) { Initialize(); } raycastHit3D = new PRaycastHit3D(); if (Fix64Vec3.Distance(start, end) < ParallelConstants.SMALLEST_RAYCAST_RANGE) { Debug.Log("RayCast range too short"); return(false); } Fix64Vec3 point = Fix64Vec3.zero; Fix64Vec3 normal = Fix64Vec3.zero; Fix64 fraction = Fix64.one; raycastHit3D = new PRaycastHit3D(); UInt16 bodyID = 0; bool hit = NativeParallel3D.RayCast(start, end, mask, ref point, ref normal, ref fraction, ref bodyID, internalWorld.IntPointer); if (hit) { raycastHit3D.point = point; raycastHit3D.normal = normal; raycastHit3D.fraction = fraction; if (bodyDictionary.ContainsKey(bodyID)) { raycastHit3D.rigidbody = bodyDictionary[bodyID].RigidBody; } else { Debug.LogError($"Rigibody not found: {bodyID}"); } return(true); } else { return(false); } }
//raycast public static bool RayCast(Fix64Vec3 start, Fix64Vec3 direction, Fix64 range, out PRaycastHit3D raycastHit3D) { return(RayCast(start, start + range * direction, out raycastHit3D)); }
public static bool RayCast(Fix64Vec3 start, Fix64Vec3 end, out PRaycastHit3D raycastHit3D) { return(RayCast(start, end, -1, out raycastHit3D)); }