How to make laser stay with player while moving

Hello,
I’m using a raycast to shoot a laser at an object on a specific layer which is working, but the starting point stays at the position of the player as the player moves away. How can i keep the laser focused on both objects as they are moving around the scene? Heres the code i have put together so far.
Thank you

using UnityEngine;
using System.Collections;

public class MiningLaser : MonoBehaviour {

	LineRenderer line;
	public bool IsKeyEnabled_M { get; set; }
	int layerMask = 1 << 8;

	void Start()
	{
		IsKeyEnabled_M = true;
		line = gameObject.GetComponent<LineRenderer> ();
		line.enabled = false;
	}

	void Update()
	{
		if (IsKeyEnabled_M)
		{
			if (Input.GetKeyDown (KeyCode.M)) 
			{
				StopCoroutine ("FireMiningLaser");
				StartCoroutine (FireMiningLaser (2.0f));
			}
		}
	}

	IEnumerator FireMiningLaser(float waitTime)
	{
		line.enabled = true;
		IsKeyEnabled_M = false;

		while (Input.GetKeyDown (KeyCode.M))
		{
			Ray ray = new Ray (transform.position, transform.forward);
			RaycastHit hit;
			line.SetPosition (0, ray.origin);

			if (Physics.Raycast (ray, out hit, 100, layerMask))
				line.SetPosition (1, hit.transform.position);
			else
				line.SetPosition (1, ray.GetPoint (100));
			
			yield return new WaitForSeconds (waitTime);
		}

		line.enabled = false;
		IsKeyEnabled_M = true;
	}
}

using UnityEngine;
using System.Collections;

public class MiningLaser : MonoBehaviour {

    public LineRenderer line;
    public bool IsKeyEnabled_M { get; set; }
    int layerMask = 1 << 8;
    public float waitTime = 1.0f;
    void Start()
    {
        IsKeyEnabled_M = true;
        line = gameObject.GetComponent<LineRenderer>();
        line.enabled = false;
    }

    void Update()
    {
        

        line.SetPosition(0, transform.position);

        if (Input.GetKeyDown(KeyCode.M))
        {
            IsKeyEnabled_M = true;
            StartCoroutine(FireMiningLaser(waitTime));
        }
        else if (Input.GetKeyUp(KeyCode.M))
        {
            IsKeyEnabled_M = false;
            StopCoroutine("FireMiningLaser");
        }
        
    }

    IEnumerator FireMiningLaser(float waitTime)
    {
        line.enabled = true;

        while (IsKeyEnabled_M)
        {
            Ray ray = new Ray(transform.position, transform.forward);

            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 100, layerMask))
                line.SetPosition(1, hit.transform.position);
            else
                line.SetPosition(1, ray.GetPoint(100));

            yield return new WaitForSeconds(waitTime);
        }

        line.enabled = false;
    }
}

Try this script. I don’t know if you want the laser to be semi auto or not. Instead of using WaitForSeconds do yield return null, if you want a continuous laser. When working with coroutines, the transform is not updated on every frame like in the update function, but instead it is updated in intervals (when in a coroutine).