Help with rotation clamping relative to another object
I'm experimenting with scripting turret-like behavior. I have made it to cope with a moving and rotating mount / vehicle. for the past few hours, I've been trying to somehow retrieve and clamp the Euler angles of these small cubes. This is so I can implement a specific cone of fire - just like real gun turrets.
Since the angles go from 0 to 360 in the manner that they do, the smaller "turrets" spasm around instead of dragging behind.
public class AnchorScript : MonoBehaviour
{
public Transform anchor;
public bool rotateWithAnchor;
public float minElevation;
public float maxElevation;
public bool useRelativeTransform;
public Vector3 relativeFixedPosition;
public Vector3 relativeFixedRotation;
void Start()
{
if (useRelativeTransform)
{
//use script values for relative position and rotation
transform.position = anchor.position + relativeFixedPosition;
transform.eulerAngles = anchor.eulerAngles + relativeFixedRotation;
}
else
{
//use the current placement for relative position and rotation
relativeFixedPosition = transform.position - anchor.position;
relativeFixedRotation = transform.eulerAngles - anchor.eulerAngles;
}
if (rotateWithAnchor)
{
transform.SetParent(anchor);
}
}
//figure out update methods
void Update()
{
if (!rotateWithAnchor)
{
Vector3 anchorPosition = anchor.position;
Vector3 anchorRotation = new Vector3(anchor.rotation.eulerAngles.x, anchor.rotation.eulerAngles.y, anchor.rotation.eulerAngles.z);
//transforms position to be positioned on the surface as it rotates
Vector3 relativePosition = Quaternion.Euler(anchorRotation) * relativeFixedPosition;
transform.position = relativePosition + anchorPosition;
}
if (rotateWithAnchor)
{
//only works if parented bc of the localeulerangles
Vector3 rotation = transform.localEulerAngles;
rotation.x = Mathf.Clamp(rotation.x, minElevation, maxElevation);
transform.localEulerAngles = rotation;
}
}
}
a.png
(33.3 kB)
Comment
Your answer
Follow this Question
Related Questions
Object rotation problem 1 Answer
Applying a rotation relative to the object's starting rotation 0 Answers
turret not facing correct rotation 3 Answers
Turret Rotation Relative to Body 0 Answers