Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class ReflectiveObject : MonoBehaviour
- {
- public bool isReflecting = false; // Checks whether this object is being hit by a laser
- public float laserSize = 0.1f;
- [Header("LaserProperties")]
- public Transform emitPoint; // Empty gameobject that is laser origin
- LineRenderer lr;
- public Transform endPoint; // Empty gameobject that is end of laser
- [Header("GameObjects")]
- public GameObject sparks;
- public GameObject pointLight;
- private Vector3 originalPosition; // Stores the original position of the endpoint before it is moved by lineRenderer
- void OnTriggerStay(Collider other)
- {
- if (other.tag == "Laser")
- {
- isReflecting = true;
- }
- }
- void OnTriggerExit(Collider other)
- {
- if (other.tag == "Laser")
- {
- isReflecting = false;
- }
- }
- void Start()
- {
- lr = GetComponent<LineRenderer>();
- GetComponent<LineRenderer>().enabled = false; // Does not start shooting laser upon play
- sparks.SetActive(false);
- pointLight.SetActive(false); // sparks and pointLight start inactive
- originalPosition = endPoint.transform.position; // Stores reference to endPoint's original position
- }
- // Update is called once per frame
- void Update()
- {
- if (isReflecting)
- {
- lr.startWidth = laserSize; lr.endWidth = laserSize;
- GetComponent<LineRenderer>().enabled = true; // Shoot own laser while hit by laser
- sparks.SetActive(true);
- pointLight.SetActive(true);
- lr.SetPosition(0, emitPoint.position); // Set start point of laser to empty gameObject
- RaycastHit hit;
- if (Physics.Raycast(emitPoint.position, transform.right, out hit, Mathf.Infinity, -1, QueryTriggerInteraction.Ignore))
- {
- if (hit.collider)
- {
- lr.SetPosition(1, hit.point); // Set end point of laser to the point where raycast hits collider
- endPoint.position = hit.point;
- }
- }
- else
- {
- lr.SetPosition(1, emitPoint.position + transform.right * 1000); // Line extends 1000 units to the right if not hitting anything
- sparks.SetActive(false);
- pointLight.SetActive(false);
- }
- }
- else
- {
- endPoint.transform.position = originalPosition; // When we are not reflecting, return end point to originalPosition;
- GetComponent<LineRenderer>().enabled = false;
- sparks.SetActive(false);
- pointLight.SetActive(false); // sparks and pointLight deactivated
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment