# FOV visual representation script. Rotation causes offset

I am making a script which will visually represent the FOV of an AI. I have gotten it to work well so far. The result looks like this.

Nice and dandy. Thought it would work. Until i rotated the player. I got massively skewed results and i have sat for an entire day, unable to figure this out and i am currently going bald at a never before seen rate.
This is what a 90 degree rotation looks like

And upon rotating the player 180 degrees the raycasts and the actual mesh are going in completely opposite directions.
The offset affects the raycast rotation and not the mesh rotation.
The script itself:

``````using UnityEngine;
using System.Collections;

public class FOVRenderer : MonoBehaviour {

//Field of view
public float fov = 30f;
//How many iterations to loop through? Resolution of the mesh
public int iterations = 50;
//Range of the view
public float viewRange = 50f;

//View mesh
MeshFilter meshFilter;
Mesh mesh;
// Use this for initialization
void Start () {
meshFilter = gameObject.GetComponent<MeshFilter>();
mesh = new Mesh();
mesh.name = "FOVMesh";
meshFilter.mesh = mesh;
}

// Update is called once per frame
void Update () {
//Degrees per step
float stepAmount = fov/iterations;
//Store vertices
Vector3[] verts = new Vector3[iterations + 2];
verts[0] = Vector3.zero;
for(int i = 0; i<=iterations;i++)
{
Vector3 direction = DirectionFromAngle(transform.eulerAngles.y-fov/2+stepAmount*i);
Debug.DrawRay(transform.position,direction*viewRange,Color.blue); //This works
RaycastHit hit;
if (Physics.Raycast(transform.position, direction, out hit, viewRange))
{
verts[i + 1] = transform.InverseTransformPoint(hit.point); //This also works
}
else
verts[i + 1] = direction*viewRange; //The assigning of this somehow has a 2*y rotation
}
//Create triangles
int[] tris = new int[(verts.Length - 2)*3];
for(int i = 0; i < verts.Length-2; i++)
{
tris[i * 3] = 0;
tris[i * 3 + 1] = i + 1;
tris[i * 3 + 2] = i + 2;
}
mesh.Clear();
mesh.vertices = verts;
mesh.triangles = tris;
mesh.RecalculateNormals();
}

Vector3 DirectionFromAngle(float angleInDegrees)
{
}
}
``````

Any help is greatly appreciated. Thanks in advance.

Edit 1:
I am stupid. The mesh is the one rotating more than it should. It rotates 2*y. The raycast is being casted correctly.

I solved it! The points that was assigned by default if the raycast hit nothing had an offset of 2*y. Therefore i created a compensation for this offset like this:

verts[i + 1] = (Quaternion.Euler(0, -transform.eulerAngles.y, 0) * direction)*viewRange;

This line would rotate the point of the back 1y, meaning the overall rotation would be 2y - 1*y = y leaving us with the correct angle