private void Update()
    {
        if (goingForward)
        {
            progress += Time.deltaTime / duration;
            if (progress > 1f)
            {
                if (mode == SplineWalkerMode.Once)
                {
                    progress = 1f;
                }
                else if (mode == SplineWalkerMode.Loop)
                {
                    progress -= 1f;
                }
                else
                {
                    progress     = 2f - progress;
                    goingForward = false;
                }
            }
        }
        else
        {
            progress -= Time.deltaTime / duration;
            if (progress < 0f)
            {
                progress     = -progress;
                goingForward = true;
            }
        }

        Vector3 position = spline.GetPoint(progress);

        transform.localPosition = position;
        if (lookForward)
        {
            transform.LookAt(position + spline.GetDirection(progress));
            transform.Rotate(0, arrowCorrection, arrowCorrection);
        }

        if (lookField)
        {
            if (fieldControl.FieldMode == VectorFieldMode.Sink)
            {
                transform.LookAt(fieldControl.GetVectorTransform(transform.position));

                if (!Camera)
                {
                    transform.Rotate(0, arrowCorrection, arrowCorrection);
                }
            }
            else if (fieldControl.FieldMode == VectorFieldMode.Source)
            {
                transform.LookAt(fieldControl.GetVectorTransform(transform.position));
                transform.Rotate(0, arrowCorrection, arrowCorrection);
            }
        }
    }
    // Use this for initialization
    void Start()
    {
        if (!curveRenderer)
        {
            curveRenderer = GetComponent <LineRenderer>();
            //cartesianLines = new List<LineRenderer>();
        }

        //LineRenderer lRend1 = new GameObject().AddComponent<LineRenderer>() as LineRenderer;
        //lRend1.SetVertexCount(2);
        //lRend1.SetPosition(0, origin+transform.position);
        //lRend1.SetPosition(1, xend + transform.position);
        //lRend1.material.color = Color.white;
        //lRend1.enabled = true;
        //cartesianLines.Add(lRend1);


        //LineRenderer lRend2 = new GameObject().AddComponent<LineRenderer>() as LineRenderer;
        //lRend2.SetVertexCount(2);
        //lRend2.SetPosition(0, origin + transform.position);
        //lRend2.SetPosition(1, yend + transform.position);
        //lRend2.material.color = Color.white;
        //lRend2.enabled = true;
        //cartesianLines.Add(lRend2);


        //LineRenderer lRend3 = new GameObject().AddComponent<LineRenderer>() as LineRenderer;
        //lRend3.SetVertexCount(2);
        //lRend3.SetPosition(0, origin + transform.position);
        //lRend3.SetPosition(1, zend + transform.position);
        //lRend3.material.color = Color.white;
        //lRend3.enabled = true;
        //cartesianLines.Add(lRend3);

        //cartesian = new GameObject[(int)xrange / density, (int)yrange / density, (int)zrange / density];
        //Material material = Resources.Load("ArrowAsset/materials", typeof(Material)) as Material;
        Mesh myMesh = (Mesh)Resources.Load("ArrowAsset/CorrectedPivotArrow", typeof(Mesh));

        GameObject prefab = new GameObject("Arrows");

        prefab.transform.localScale += new Vector3(scale, scale, scale);
        prefab.AddComponent <MeshFilter>();
        prefab.AddComponent <MeshRenderer>();
        prefab.GetComponent <MeshFilter>().sharedMesh = myMesh;
        //prefab.GetComponent<MeshRenderer>().material.color = Color.white;
        Material myMaterial = (Material)Resources.Load("ArrowAsset/MyWhite", typeof(Material));

        prefab.GetComponent <MeshRenderer>().material = myMaterial;


        for (int i = 0; i < (int)xrange / density; i = i + 1)
        {
            for (int j = 0; j < (int)yrange / density; j = j + 1)
            {
                for (int k = 0; k < (int)zrange / density; k = k + 1)
                {
                    /*
                     * cartesian[i, j, k] = new GameObject();
                     * cartesian[i, j, k].transform.position = new Vector3(i * density, j * density, k * density);
                     * cartesian[i, j, k].AddComponent<MeshFilter>();
                     * cartesian[i, j, k].AddComponent<MeshRenderer>();
                     * cartesian[i, j, k].GetComponent<MeshFilter>().sharedMesh = myMesh;
                     * cartesian[i, j, k].GetComponent<MeshRenderer>().material.color = Color.white;
                     *
                     * cartesian[i, j, k].transform.localScale += new Vector3(50, 50, 50);
                     */

                    GameObject arrow;

                    Vector3 pos = origin + new Vector3(i * density, j * density, k * density) + transform.position;

                    if (fieldControl.FieldMode == VectorFieldMode.Sink)
                    {
                        arrow = (Instantiate(prefab, pos, Quaternion.identity)) as GameObject;
                        arrow.transform.LookAt(fieldControl.GetVectorTransform(transform.position));
                        arrow.transform.Rotate(0, arrowCorrection, arrowCorrection);
                    }
                    else if (fieldControl.FieldMode == VectorFieldMode.Source)
                    {
                        arrow = (Instantiate(prefab, pos, Quaternion.identity)) as GameObject;
                        arrow.transform.LookAt(fieldControl.GetVectorTransform(transform.position));
                        arrow.transform.Rotate(0, arrowCorrection, arrowCorrection);
                    }
                    else
                    {
                        arrow = Instantiate(prefab, pos, Quaternion.identity) as GameObject;
                    }
                    arrow = null;
                }
            }
        }
    }