private Vector2 GetLineIntersect(Vector2 startPos, Vector2 endPos) { // Important: startPos is considered to be outside the NavMesh Vector2 actualPos = startPos; Vector2 direction = (endPos - startPos).normalized; float magnitude = (endPos - startPos).magnitude; int numInside = 0; float radius = magnitude * 0.02f; for (float i = 0f; i < magnitude; i += (radius * 2f)) { actualPos = startPos + (direction * i); if (UnityVersionHandler.Perform2DOverlapCircle(actualPos, radius, NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0) { numInside++; } if (numInside == 2) { return(actualPos); } } return(Vector2.zero); }
private bool IsLineClear(Vector2 startPos, Vector2 endPos) { // This will test if points can "see" each other, by doing a circle overlap check along the line between them Vector2 actualPos = startPos; Vector2 direction = (endPos - startPos).normalized; float magnitude = (endPos - startPos).magnitude; float searchStep = 100f * searchRadius * searchRadius; // squared so that gap between circles increases with radius for (float i = 0f; i < magnitude; i += searchStep) { actualPos = startPos + (direction * i); if (UnityVersionHandler.Perform2DOverlapCircle(actualPos, searchRadius, NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 1) { return(false); } } return(true); }