Complicated Rotation Issue

Hello everyone,

This is my first post on the forums and probably will not be my last :). I have run into something of a roadblock in my code.

What I’m trying to do is to get the player’s upper body to face the “CursorWorldPosition” which I have obtained using a RaycastHit from the Camera to the mouse position. The solution works perfectly, the player aims exactly at the mouse and that is where the bullet goes.

The problem occurs when I try to modify the value of the player’s rotation. I want it only to rotate on a fixed vertical axis. I have tried numerous things here including localRotation, localEulerAngles, EulerAngles, transform.rotation.eulerAngles. And nothing seems to be working, rotation is always off and I can never quite get the exact vertical axis that it is rotating on.

Figuring this axis out would really help as I also need to set a Mathf.Clamp on it to ensure that the player cannot shoot himself :).

Here is the segment of code I am currently working with. (Please let me know if you would like me to expand)

		Quaternion Focus = Quaternion.LookRotation(hit.point - transform.position);

	    transform.rotation = Quaternion.Slerp(transform.rotation, Focus, 100);

This is pretty much just the basic “Look at object” script, but I can’t seem to figure out how to modify it on only a vertical axis.

I would appreciate any help I can get. Thank you.

McMayhem

just go to unityGEMS.com for a full explanation of quaternions, eulers etc

1 Answer

1

It sounds as if you want to rotate, and then make some additional rotation on top of that. This means the Quaternions need to be multiplied:

transform.rotation = Quaternion.LookRotation(hit.point - transform.position) * Quaternion.Slerp(transform.rotation, Focus, 100);