コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }