Ricochet Trajectories C#

I’m having trouble calculating the angle of reflection for bullet trajectories in a 3rd person shooter I’m developing.

I can get the Y rotation to work fine, but when trying to implement the X rotation, it all goes a bit funny.

I’m using Vector3.reflect to calculate the angle, then using Mathf.Atan2 to turn that into a degree value.

void FixedUpdate(){
		Ray ray = new Ray(transform.position,transform.forward);
		RaycastHit hit;
		Debug.DrawRay(transform.position,transform.forward);
		
		if(Physics.Raycast(ray, out hit, Time.deltaTime*velocity + 0.1f)){
			Vector3 reflectDirection = Vector3.Reflect(ray.direction,hit.normal);
			float rotY = Mathf.Atan2(reflectDirection.x,reflectDirection.z)*Mathf.Rad2Deg;
			float rotX = Mathf.Atan2(reflectDirection.y,reflectDirection.z)*Mathf.Rad2Deg;
			Debug.Log ("rotX = "+rotX+", rotY = "+rotY);
			transform.eulerAngles = new Vector3 (rotX,rotY,transform.rotation.z);			
		}
		if(velocity >0){
			//velocity -= drag;
		}else{
			Destroy(this.gameObject);
		}
		downForce += gravity*Time.deltaTime;
		this.transform.Translate(Vector3.forward*velocity*Time.deltaTime, this.transform);
		//this.transform.Translate(Vector3.down*downForce);
		int materialSelect = (int)(velocity / 160);
		thisRenderer.material = materials [materialSelect];    
	}

I can’t get my head around this. Any help would be vastly apreciated.

Cheers,
Alex

Found the problem, I shouldn’t have been using a Vector3 as my out value. I did this instead and it works perfectly;

	void FixedUpdate(){
		//bulletHit = DoHitCheck();
		Ray ray = new Ray(transform.position,transform.forward);
		RaycastHit hit;
		//Debug.DrawRay(transform.position,transform.forward);
		
		if(Physics.Raycast(ray, out hit, Time.deltaTime*velocity + 0.1f)){
			Vector3 reflectDirection = Vector3.Reflect(ray.direction.normalized,hit.normal);
			transform.rotation = Quaternion.LookRotation(reflectDirection);
		}
		if(velocity >0){
			velocity -= drag;
		}else{
			Destroy(this.gameObject);
		}
		downForce += gravity*Time.deltaTime;
		this.transform.Translate(Vector3.forward*velocity*Time.deltaTime, this.transform);
		this.transform.Translate(Vector3.down*downForce);
		//Debug.Log ("" + velocity);
		int materialSelect = (int)(velocity / 160);
		thisRenderer.material = materials [materialSelect];
		

	}