Raycast Troubleshooting

Hi, there. I’m still learning and have been struggling with Raycast. This is the fourth iteration of some code I’m using in an attempt to make a simple laser pointer. I want the laser to extend just a bit (rather than forever) and I want it to stop if it collides with anything. Pretty basic, I thought. I have the laser pointer working fine with Line Renderer. But when I add the Raycast code, it doesn’t point forward – it points at a weird downward angle. When I change this:

     else
     {
         laserBeam.SetPosition(1, shootRay.origin + shootRay.direction * range);

to this:

         else
         {
             laserBeam.SetPosition(1, transform.forward * 5000);

it points at the correct angle but extends forever – so I must be doing something wrong with the range. Is there a better way? Thanks for any suggestions!

Oh! I’m working in Unity 2018.3.3f1, in an iOS build.

public class beam : MonoBehaviour 
{

	public float range = 5f;

	LineRenderer laserBeam;
	RaycastHit laserHit;
	Ray shootRay;

	// Use this for initialization
	void Start () 
	{
		laserBeam = GetComponent<LineRenderer>();
	}

	
	// Update is called once per frame
	void Update () 
	{
		shootRay.origin = transform.position;
		shootRay.direction = transform.forward;

		if (Physics.Raycast(shootRay, out laserHit, range))
		{
			if(laserHit.collider)
			{
				laserBeam.SetPosition(1, laserHit.point);
			}
		}
		else
		{
			laserBeam.SetPosition(1, shootRay.origin + shootRay.direction * range);
		}
	}
}

I solved it! I had “use world space” unchecked on my line renderers – and double-checked, by using code to set it to false – without an impact. But I still needed to use transform.InverseTransformPoint. I’m not 100% sure WHY – so if you know, I’d love to understand this better. But at least I got the code working with this:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class beam : MonoBehaviour 
{

	public float range = 5f;
	
    LineRenderer laserBeam;
	RaycastHit hit;
    Ray shootRay;


	// Use this for initialization
	void Start () 
	{
		laserBeam = GetComponent<LineRenderer>();
	}


	// Update is called once per frame
	void Update () 
	{
        laserBeam.SetPosition (0, Vector3.zero);
        if (Physics.Raycast(transform.position, transform.forward, out hit, range))
		{
			//If needed, use next two lines to test code
            //print("Found an object - distance: " + hit.point);
            //Debug.DrawRay(transform.position, transform.forward, Color.yellow);

            if(hit.collider)
			{
				laserBeam.SetPosition(1, transform.InverseTransformPoint(hit.point));
			}
		}
		else
		{
			laserBeam.SetPosition(1, transform.InverseTransformPoint(transform.position + transform.forward * range));
		}
	}
}