I have a player carrying item. I need to keep the rotation in sync with first person player camera when player rotating horizontaly and also vertically.
I’m able to keep horizontal rotation relative to player (transform):
first cache _rotation on item grab:
_rotation = _carriedRigidbody.rotation.eulerAngles - transform.eulerAngles;
then in update / fixed update add the stored rotation to the transform rotation:
_carriedRigidbody.rotation = Quaternion.Euler(transform.eulerAngles + _rotation);
Problem is I want to keep vertical rotation in sync with player camera as well = when player looks upwards or downwards.
Video how it behaves now. without any rotation restrictions (not desired):
the item must keep the same horizontal and vertical angles with player's camera when player turning any direction.
I finally figured it out. It’s ridiculously easy when thinking about it in a different fashion :).
use grabpoint parented in the player’s camera. This grabpoint of course keeps the relative position to the camera automatically
now on item grab initialize the grabpoint.rotation to the rotation of carried item (rigidbody.transform.rotation)
now in every frame set the rotation of the carried rigidbody to the rotation of the grab point. Pretty simple, isn’t it?
carried object is still not parented to the player camera which was desired (keeps up with grabpoint by lerping rigidbody.velocity to the grabpoint position)