0

I have this code for a laser, I want to load a new scene when the laser is touching the player. this script does not work, I'll happy for your help! :)

 void Update()
    {
        Vector3 Point = transform.position + transform.forward * Dis;

        if (Physics.Raycast (transform.position, transform.forward, out hit, Dis))
        {
            if (hit.collider.tag == "Player")
                SceneManager.LoadScene(2);

            GetComponent<LineRenderer>().SetPosition(0, transform.position);
            GetComponent<LineRenderer>().SetPosition(1, hit.point);
            luzColosao.transform.position = hit.point - pos;
        }
        else
        {
            GetComponent<LineRenderer>().SetPosition(0, transform.position);
            GetComponent<LineRenderer>().SetPosition(1, Point);
            luzColosao.transform.position = Point;
        }
    }
noa
  • 1
  • 4

1 Answers1

0


It seems that everything's ok in your code. use Debug.Draw to check your Raycast direction. This function will draw a line exactly the same path that your Raycast will go in your editor. if this Line was correctly hit to player, so you have to check your conditions. Read unity's manual here

void Update()
    {

        Vector3 forward = transform.TransformDirection(Vector3.forward) * Dist;

        Vector3 Point = transform.position + transform.forward * Dis;

        if (Physics.Raycast (transform.position, transform.forward, out hit, Dis))
        {
            if (hit.collider.tag == "Player")
                SceneManager.LoadScene(2);

            GetComponent<LineRenderer>().SetPosition(0, transform.position);
            GetComponent<LineRenderer>().SetPosition(1, hit.point);
            luzColosao.transform.position = hit.point - pos;

            Debug.DrawRay(transform.position, transform.forward, Color.green);
        }
        else
        {
            GetComponent<LineRenderer>().SetPosition(0, transform.position);
            GetComponent<LineRenderer>().SetPosition(1, Point);
            luzColosao.transform.position = Point;

            Debug.DrawRay(transform.position, transform.forward, Color.red);
        }
    }