Advertisement
NomadicWarrior

Line Renderer Reflection

Aug 1st, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. [RequireComponent(typeof(LineRenderer))]
  6. public class Laser : MonoBehaviour
  7. {
  8. // How many bounce counts
  9. [Range(1, 5)]
  10. [SerializeField] private int _maxBounce = 3;
  11.  
  12. // Maximum line lenth
  13. [SerializeField] private float _maxDistance = 50f;
  14.  
  15. public int _count;
  16.  
  17. private LineRenderer lineRenderer;
  18.  
  19. public Transform linePoint;
  20.  
  21.  
  22. private void Start()
  23. {
  24. lineRenderer = GetComponent<LineRenderer>();
  25. }
  26.  
  27. private void Update()
  28. {
  29. _count = 0;
  30. lineRenderer.SetVertexCount(2);
  31. lineRenderer.SetPosition(0, transform.position);
  32. RayCast(transform.position, transform.right);
  33. }
  34.  
  35. private bool RayCast(Vector2 pos, Vector2 dir)
  36. {
  37. RaycastHit2D hit2D = Physics2D.Raycast(pos, dir, _maxDistance);
  38.  
  39. if(hit2D && _count <= _maxBounce - 1)
  40. {
  41. _count++;
  42.  
  43. var reflectAngle = Vector2.Reflect(dir, hit2D.normal);
  44.  
  45. lineRenderer.SetVertexCount(_count + 1);
  46. lineRenderer.SetPosition(_count, hit2D.point);
  47. RayCast(hit2D.point + reflectAngle, reflectAngle);
  48. return true;
  49. }
  50. else if(hit2D == false)
  51. {
  52. lineRenderer.SetVertexCount(_count + 2);
  53. lineRenderer.SetPosition(_count + 1, pos + dir * _maxDistance);
  54. }
  55. return false;
  56. }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement