- Home /
Set a rotation relative to position between two objects.
I have code can when a joystick is moved an indicator rotates to the direction of the joystick. The indicators location can be moved by pointing the joystick. This is designed for a VR game so that you can point and rotate an indicator to teleport to its location. Like Robo Recall for oculus if anyone has ever played it.
This all works for the most part. However the rotation of the indicator based on the joystick rotates based of global coordinates, not relative to the direction the player is facing.
What i want is when the player moves the joystick to the up position the indicator should be facing the same direction as the player, down the opposite and vice versa.
Sorry I probably didn't explain it properly but here is my code.
if (Physics.Raycast(ray, out hit, 1 << LayerMask.NameToLayer("Walkable"))) //Fires a ray from the players hand to the ground
{
movePosition = hit.point;//used in another function
Vector3 indicatorPosition = hit.point;
indicatorPosition.y = 0.1f; //sets y to a constant 0.1 so the indicator hovers above the ground
Vector2 thumbstickPos = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick); //Gets a vector representation of the oculus touch thumbstick position
float thumbstickRot = Mathf.Atan2(thumbstickPos.y, thumbstickPos.x) * Mathf.Rad2Deg; //converts vector to angle
moveRotation = Quaternion.Euler(0, thumbstickRot, 0);//creates a quaternion based off that angle
moveIndicator.transform.position = indicatorPosition;//moves the indicator to the position being pointed too
moveIndicator.transform.rotation = Quaternion.Euler(90, thumbstickRot, 0); //sets indicators rotation to the joystick rotation
}
Is the Indicator a child of the player?
If it were then maybe setting moveIdicator.transform.localRotation might fix the issue?
If it is not or that doesn't work, you could just grab the direction of the players forward vector and treat that as "up" on the joystick. Do either of these methods make sense?