Exemple #1
0
    void LateUpdate()
    {
        SetOrigin(targetPlayer.position);
        SetAimDirection((UTIL.MousePos() - targetPlayer.position).normalized);


        origin = GameObject.FindGameObjectWithTag("Player").transform.position;
        float angle         = startingAngle;
        float angleIncrease = fov / rayCount;



        Vector3[] vertices  = new Vector3[rayCount + 1 + 1];
        Vector2[] uv        = new Vector2[vertices.Length];
        int[]     triangles = new int[rayCount * 3];



        vertices[0] = origin;

        int vertexIndex   = 1;
        int triangleIndex = 0;

        for (int i = 0; i <= rayCount; i++)
        {
            Vector3      vertex;
            RaycastHit2D hit = Physics2D.Raycast(origin, UTIL.GetVectorFromAngle(angle), viewDistance, hitLayers);
            if (hit.collider == null)
            {
                vertex = origin + UTIL.GetVectorFromAngle(angle) * viewDistance;
            }
            else
            {
                vertex = hit.point;
            }
            vertices[vertexIndex] = vertex;

            if (i > 0)
            {
                triangles[triangleIndex + 0] = 0;
                triangles[triangleIndex + 1] = vertexIndex - 1;
                triangles[triangleIndex + 2] = vertexIndex;

                triangleIndex += 3;
            }
            vertexIndex++;
            angle -= angleIncrease;
        }
        mesh.vertices  = vertices;
        mesh.uv        = uv;
        mesh.triangles = triangles;
        mesh.bounds    = new Bounds(origin, Vector3.one * 1000f);
    }