using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(LineRenderer))] public class _LaserSystem : MonoBehaviour { [SerializeField] private int _Reflections; [SerializeField] private float _MaxLength; private LineRenderer _lineRenderer; private Ray _ray; private RaycastHit _hit; private Vector3 _dir; // Start is called before the first frame update private void Awake() { _lineRenderer = GetComponent(); } // Update is called once per frame void Update() { Laser(); } void Laser() { _ray = new Ray(transform.position, transform.forward); _lineRenderer.positionCount = 1; _lineRenderer.SetPosition(0, transform.position); ; float reaminingLength = _MaxLength; for (int i = 0; i < _Reflections; i++) { if (Physics.Raycast(_ray.origin, _ray.direction, out _hit, reaminingLength)) { _lineRenderer.positionCount += 1; _lineRenderer.SetPosition(_lineRenderer.positionCount - 1, _hit.point); reaminingLength -= Vector3.Distance(_ray.origin, _hit.point); _ray = new Ray(_hit.point, Vector3.Reflect(_ray.direction, _hit.normal)); if (_hit.collider.tag != "Mirror") break; } else { _lineRenderer.positionCount += 1; _lineRenderer.SetPosition(_lineRenderer.positionCount - 1,_ray.origin + _ray.direction * reaminingLength); } } } }