Ejemplo n.º 1
0
        /// <summary>
        /// Terrain hit at x,y
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public static RaycastHit?TerrainHit(float x, float y)
        {
            SplineBase        insideSpline = null;
            List <SplineBase> splines      = Splines;

            for (int i = 0; i < splines.Count; ++i)
            {
                SplineBase spline = splines[i];
                if (spline.HasChilds)
                {
                    continue;
                }
                if (spline is HazardBase)
                {
                    continue;
                }
                if (!spline.InBounds(new Vector3(x, 0, y)))
                {
                    continue;
                }

                if (new Vector2(x, y).IsInside(spline.Lines.Points))
                {
                    insideSpline = spline;
                    break;
                }
            }

            if (insideSpline)
            {
                Ray        ray = new Ray(new Vector3(x, 7777, y), -Vector3.up);
                RaycastHit hit;
                if (insideSpline.GetComponent <Collider>().Raycast(ray, out hit, 8888))
                {
                    return(hit);
                }
            }

            if (true)
            {
                Ray        ray = new Ray(new Vector3(x, 7777, y), -Vector3.up);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit, 8888))
                {
                    while (!hit.transform.gameObject.name.Contains("Spline"))
                    {
                        ray = new Ray(new Vector3(x, hit.point.y - 0.01f, y), -Vector3.up);
                        if (!Physics.Raycast(ray, out hit))
                        {
                            break;
                        }
                    }
                    return(hit);
                }

                Debug.DrawLine(ray.origin, ray.origin + ray.direction * 8888, Color.green, 60);

                if (Terrain.GetComponent <Collider>().Raycast(ray, out hit, 8888))
                {
                    return(hit);
                }
            }

            return(null);
        }