public void OnAddedPathComplete(Path p) { addedPath = new List <List <Vector3> >(); List <Vector3?> leftList = new List <Vector3?>(); List <Vector3?> leftOneList = new List <Vector3?>(); List <Vector3?> leftTwoList = new List <Vector3?>(); List <Vector3?> rightList = new List <Vector3?>(); List <Vector3?> rightOneList = new List <Vector3?>(); List <Vector3?> rightTwoList = new List <Vector3?>(); for (var i = 0; i < p.vectorPath.Count; i++) { var pointVectorPath = p.vectorPath[i]; if (i + 1 < p.vectorPath.Count) { var dir = (p.vectorPath[i + 1] - pointVectorPath).normalized; var left = new Vector2(-dir.y, dir.x); var leftOne = ProjectMath.Vector2Rotate(left, -10); var leftTwo = ProjectMath.Vector2Rotate(left, 10); var right = new Vector2(dir.y, -dir.x); var rightOne = ProjectMath.Vector2Rotate(right, -10); var rightTwo = ProjectMath.Vector2Rotate(right, 10); leftList.Add(checkRayDistance(Physics2D.Raycast(pointVectorPath, left), pointVectorPath)); leftOneList.Add(checkRayDistance(Physics2D.Raycast(pointVectorPath, leftOne), pointVectorPath)); leftTwoList.Add(checkRayDistance(Physics2D.Raycast(pointVectorPath, leftTwo), pointVectorPath)); rightList.Add(checkRayDistance(Physics2D.Raycast(pointVectorPath, right), pointVectorPath)); rightOneList.Add(checkRayDistance(Physics2D.Raycast(pointVectorPath, rightOne), pointVectorPath)); rightTwoList.Add(checkRayDistance(Physics2D.Raycast(pointVectorPath, rightTwo), pointVectorPath)); } } addedPath.Add(leftList.Where(e => e.HasValue).Select(e => e.Value).ToList()); addedPath.Add(leftOneList.Where(e => e.HasValue).Select(e => e.Value).ToList()); addedPath.Add(leftTwoList.Where(e => e.HasValue).Select(e => e.Value).ToList()); addedPath.Add(rightList.Where(e => e.HasValue).Select(e => e.Value).ToList()); addedPath.Add(rightOneList.Where(e => e.HasValue).Select(e => e.Value).ToList()); addedPath.Add(rightTwoList.Where(e => e.HasValue).Select(e => e.Value).ToList()); addedPath.ForEach(e => Debug.Log(e.Count)); }