# Change gameObject rotation towards reflection direction.

Hi, i am making a game where you shoot an arrow which can reflect from the walls. I did a ricochet code but can’t figure out how to make arrow always face its direction. I tried many different things but did not find a solution. Can somebody help me with that?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class arrowScript : MonoBehaviour
{
public float speed = 50f;
public Rigidbody2D rb;
public Vector3 arrowDir;
//private float arrowAngle;

``````private void Start()
{
arrowDir = bowScript.dir;
arrowDir.z = 0;
rb.velocity = arrowDir.normalized * speed;
// transform.Rotate(0f,0f,arrowAngle);
}
void OnCollisionEnter2D(Collision2D other)
{
if(other.gameObject.CompareTag("Block"))
{
Vector2 wallNormal = other.contacts[0].normal;
arrowDir = Vector2.Reflect(rb.velocity, wallNormal).normalized;
//arrowAngle = Vector2.Angle(arrowDir, wallNormal);
rb.velocity = (arrowDir * speed);
// transform.Rotate(0f, 0f, arrowAngle);
// Debug.Log(arrowAngle);
}
}
``````

}

Okay, i have solved this thing a while ago, so decided to post my way on rotation. Maybe somebody will find it useful.

``````     Vector2 wallNormal = other.contacts[0].normal;
arrowDir = Vector2.Reflect(rb.velocity, wallNormal).normalized;
rb.velocity = (arrowDir * speed);
Debug.Log("arrowdir " + arrowDir);
float arrowAngle = Mathf.Atan2(arrowDir.y, arrowDir.x) * Mathf.Rad2Deg;
Quaternion q = Quaternion.AngleAxis(arrowAngle, Vector3.forward);
transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime*100f);
``````