Very strange issue. When debugging raycasts, everything works normal when I enter the raycast from one direction (I’m using the scene view to debug), but when I move the cube to enter collision from the opposite direction, after exiting debugging from Visual Studio it completely changes the transform of the object to be in a seemingly random position much farther away from where I started. There are other issues but I will post about that on another thread. Here is my code:
public class SimpleLaser : MonoBehaviour
{
LaserManager laserManager;
private LineRenderer lr;
Collider storedObj;
Collider previousObj;
Vector3 direction;
Vector3 hitPoint;
bool addedToChain = false;
// Use this for initialization
void Start()
{
lr = GetComponent();
laserManager = GameObject.Find(“Laser Manager”).GetComponent();
}
// Update is called once per frame
void Update()
{
direction = new Vector3();
if(transform.name == “Laser”)
{
lr.SetPosition(0, transform.position);
lr.SetPosition(1, transform.forward * 5000);
direction = transform.forward;
}
else
{
lr.SetPosition(0, hitPoint);
lr.SetPosition(1, direction);
}
RaycastHit hit;
if (Physics.Raycast(transform.position, direction, out hit))
{
if (!laserManager.hitColliders.Contains(hit.collider))
{
laserManager.hitColliders.Add(hit.collider);
laserManager.numOfLaserInChain += 1;
}
if (hit.collider)
{
previousObj = storedObj;
storedObj = hit.collider;
if ((storedObj != null) && (previousObj != null))
{
if ((previousObj.name != storedObj.name))
{
if(laserManager.hitColliders.Contains(previousObj))
{
laserManager.hitColliders.Remove(previousObj);
Destroy(previousObj.GetComponent());
Destroy(previousObj.GetComponent());
}
}
}
lr.SetPosition(1, hit.point);
if(hit.collider.gameObject.GetComponent() == null)
{
hit.collider.gameObject.AddComponent();
hit.collider.gameObject.AddComponent();
if (hit.collider.name.Contains(“Red Glass”))
{
LineRenderer renderer = hit.collider.gameObject.GetComponent();
renderer.widthCurve = lr.widthCurve;
renderer.material = Resources.Load(“Materials/redlaser”);
hit.collider.GetComponent().SetPosition(0, hit.point);
hit.collider.GetComponent().hitPoint = hit.point;
hit.collider.GetComponent().direction = new Vector3(transform.position.x, transform.position.y, transform.position.z);
hit.collider.GetComponent().SetPosition(1, hit.collider.GetComponent().direction);
}
else if (hit.collider.name.Contains(“Blue Glass”))
{
}
else if (hit.collider.name.Contains(“Yellow Glass”))
{
}
else if (hit.collider.name.Contains(“Green Glass”))
{
}
else if (hit.collider.name.Contains(“Orange Glass”))
{
}
else if (hit.collider.name.Contains(“Purple Glass”))
{
}
else if (hit.collider.name.Contains(“Mirror”))
{
}
else if (hit.collider.name.Contains(“Prism”))
{
}
}
}
}
else
{
if (laserManager.hitColliders.Contains(storedObj))
{
laserManager.hitColliders.Remove(storedObj);
laserManager.numOfLaserInChain -= 1;
Destroy(storedObj.gameObject.GetComponent());
Destroy(storedObj.gameObject.GetComponent());
}
if(transform.name == “Laser”)
{
foreach (Collider collider in laserManager.hitColliders)
{
Destroy(collider.gameObject.GetComponent());
Destroy(collider.gameObject.GetComponent());
}
}
if(transform.name == “Laser”)
{
lr.SetPosition(1, transform.forward * 5000);
}
}
}
}