How do I get reflection vector from a 2D collision

Ok I am trying to do what I thought would be a simple bouncing bullet. Bullet hits wall, bounces off like a laser. I have now been at this for six hours. I was found this: Vector3.Reflect - wrong direction - Unity Answers and tried to reverse engineer the code but it is not working correctly for me.

Their Code (adapted for Physics2D):

function drawLaser(startPoint:Vector3,n:int)  
{
    var hit : RaycastHit2D ;
    var rayDir:Vector3 = Spawner.transform.up;
 
    for(var i = 0; i < n; i++)
    {   
    	hit = Physics2D.Raycast (startPoint, rayDir, 1000);  
        if (hit.collider != null) 
        {
            Debug.DrawLine (startPoint, hit.point, Color.red, 0.1, false);
         	rayDir = Vector3.Reflect( (hit.point - startPoint).normalized, hit.normal  ) ;
            startPoint = hit.point;
        }
    }
}

Now the thing that has me really confused is the above code works perfectly fires the little laser and bounces off the walls. But when I try to use the same calculation on my projectile, it derps of whatever which way it feels like. Code for my projectile here:

function OnCollisionEnter2D(coll: Collision2D)
{	
	if(coll.collider.GetComponent(Health) != null)
	{
		coll.collider.GetComponent(Health).Hurt(Dammage);
	}
	
	if(PingCount <= 0)
	{
		Destroy(gameObject);
	}
	else
	{
		var dir = Vector3.Reflect( (coll.contacts[0].point - transform.position).normalized, coll.contacts[0].normal);



		
		var angle : float = Mathf.Atan2(-dir.x,dir.y) * Mathf.Rad2Deg;
		var targetRot = Quaternion.AngleAxis(angle, Vector3.forward);
		transform.rotation = targetRot;
	}
	PingCount -= 1;
}

I would really appreciate it if someone could explain what I am doing wrong. Thanks in advance : )

PS: All of this is using physics2d

I don’t know if this is the best solution but the following is how I got it to work for my purposes. Basically, I could not figure out how to get the reflection vector from the collision. However I had a perfectly working example of how to do it with simple lines and ray casts. So I cheated. The projectile now casts a ray in front of it and when the ray hits something it does the calculation figures out the reflection vector and then rotates to face that vector.

The Code:

function PingOff()
{	
	var hit: RaycastHit2D = Physics2D.Raycast (transform.position, transform.up, 0.5, hitMask);  
	if (hit.collider != null) 
	{
		//Calculate ping
		var rayDir : Vector3 = Vector3.Reflect( (hit.point - transform.position).normalized, hit.normal  ) ;

	    
		if(hit.collider.GetComponent(Health) != null)
		{
			hit.collider.GetComponent(Health).Hurt(Dammage);
		}
		
		if(PingCount <= 0)
		{
			Destroy(gameObject);
		}
		else
		{
			//Ping off
			var dir : Vector3 = rayDir;

			var angle : float = Mathf.Atan2(-dir.x,dir.y) * Mathf.Rad2Deg;
			var targetRot = Quaternion.AngleAxis(angle, Vector3.forward);
			transform.rotation = targetRot;
		}
		PingCount -= 1;
		Dammage = Dammage * 2;
	}
}