2D Raycast reflection only changes hit.normal
When I run the program the second 2D Raycast only changes the hit.normal. This creates a ray that I display through LineRenderer that has multiple vertexes, but all on the same point.
What makes the 2D Raycast not output the values needed to reflect off of the boxes. (using Unity 5.3.1f1)
using UnityEngine;
using System.Collections;
public class MultiRayMaker : MonoBehaviour {
public Vector2 mousePosition2D;
public Vector3 mousePosition3D;
public Vector2 currentPosition;
//max distance of the ray/liine
public float distance = 20.0f;
public Vector2 inDirection;
public Vector3 reflectionDirection;
//limit of number of reflections
int limit = 7;
public string Mirror;
public int insideLimit = 0;
public int vertexCount;
//-1 so that we can increment from 0 -> 100
public int whichVertex;
LineRenderer line;
public RaycastHit2D hit;
void Start () {
line = GetComponent<LineRenderer> ();
line.enabled = false;
line.useWorldSpace = true;
}
void Update () {
mousePosition2D = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePosition3D = Camera.main.ScreenToWorldPoint (Input.mousePosition);
currentPosition = new Vector2 (transform.position.x, transform.position.y);
//when click create ray/line toward click point
if (Input.GetMouseButtonDown (0)) {
// reset insideLimit
insideLimit = 0;
LineRendererStart ();
}
}
void LineRendererStart ()
{
//local variables and initial process work
line.enabled = true;
inDirection = mousePosition3D;
vertexCount = 2;
whichVertex = 0;
line.SetPosition (whichVertex++, currentPosition);
hit = Physics2D.Raycast (currentPosition, mousePosition2D, distance, 1 << LayerMask.NameToLayer ("LightSensitive"));
//Check if something to reflect off of
if (null != hit.collider) {
while (insideLimit < limit) {
//add vertex at point of connection; Starts with whichVertex = 1 - > 2; vertexCount = 2 -> 3
line.SetVertexCount (vertexCount++);
line.SetPosition (whichVertex++, hit.point);
//creating the reflecting vector
reflectionDirection = Vector3.Reflect (mousePosition3D, hit.normal);
//OR the math below
//reflectionDirection = inDirection + ((Vector3.Dot(inDirection, hit.normal) * -2) * hit.normal);
//raycast from the point of connection, in the direction from reflecitionDirection
hit = Physics2D.Raycast (hit.point, reflectionDirection, distance, 1 << LayerMask.NameToLayer ("LightSensitive"))
if (null != hit.collider) {
//hit another reflector until it reaches limit
insideLimit++;
} else {
//hit nothing; out of while
insideLimit = limit;
}
}
} else {
//hit nothting
line.SetVertexCount (vertexCount++);
line.SetPosition (whichVertex++, mousePosition3D);
}
}
}
Main Question: Why is it not reflecting? Is it because of hit.point?
Additional Questions: (if you have the time I would appreciate it, but the main question is more important): Why is Vector3.Reflect() creating a vector that does not have the same angle relative to the normal of the side the ray is hitting? Could this be due to 3D confusion since I had to use the Vector3 reflect?
Is this an efficient way to create a reflect-able light line for 2D puzzle game?