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);
         }
     }
 }
Answer by katynoellescott · Feb 09, 2019 at 08:07 AM
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));
         }
     }
 }
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                