- Home /
Dynamically adjusting LineRenderer vertexes to follow raycasts
Hey all,
I'm working on a system wherein a "laser" bounces off mirror objects until it hits a non-mirror object and stops.
I have this working just fine with raycasts, but I'm having trouble using a linerenderer to visualize it in order for the player to be able to see it.
This is what the raycasts are doing. Perfect, right? But obviously, Debug.DrawLine is not visible to the player.
I am trying to add vertexes to the linerRenderer each time I hit a new object, and once I hit a non-mirror object, erase them all and re render it repeatedly. Here is my code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BeamSource : MonoBehaviour
{
//FOR TESTING
[SerializeField]
private bool LaserOn;
private LineRenderer line;
void Start() {
LaserOn = true;
line = GetComponent<LineRenderer>();
}
void FixedUpdate() {
if (LaserOn) {
CastRay(transform.position, transform.forward * 100);
}
}
private void clearLines() {
line.positionCount = 0;
}
private void CastRay(Vector3 origin, Vector3 destination) {
Ray beamRay = new Ray(origin, destination);
RaycastHit hit;
if (Physics.Raycast(beamRay, out hit, 100)) {
line.positionCount += 1;
line.SetPosition(line.positionCount -1, destination);
Debug.DrawLine(origin, hit.point, Color.red);
IdentifyCollision(hit, beamRay);
}
}
private void IdentifyCollision(RaycastHit hit, Ray beamRay) {
switch (hit.collider.tag) {
case "mirror":
Debug.Log("hit mirror");
CastRay(hit.point, Vector3.Reflect(beamRay.direction, hit.normal));
break;
default:
Debug.Log("hit a wall");
clearLines();
break;
}
}
}
Unfortunately, I've been messing around with this for a couple days now and for the life of me I just can't get it to work.
Is there a more efficient way to go about this? even if I got it to work as intended, repeatedly redrawing the linerenderer seems like an inefficient and costly way to create this effect.
Your answer
Follow this Question
Related Questions
Linerenderer doesn't match my ray. 1 Answer
Creating a Ray Gun 1 Answer
LineRenderer not working 0 Answers
Only One LineRenderer Renders 0 Answers
Laser Render Reflect Angle incorrect 1 Answer