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