- Home /
Turret Rotation Problems
I am trying to create a turret which rotates to face a target. The base rotates left and right, while the head rotates up and down.
I have successfuly made the base only rotate around the y axis, but the problem I am having is making the head only rotate on it's x axis - it just doesn't work right. (Shown here)
This is the code I have for the turret: using UnityEngine; using System.Collections;
public class Turret : MonoBehaviour
{
public Transform target;
public Transform rotateTransform;
private Vector3 initialRotation;
public Transform pivotTransform;
private Vector3 initialPivot;
public float rotateSpeed = 0.25f;
void Start()
{
initialRotation = rotateTransform.eulerAngles;
initialPivot = pivotTransform.eulerAngles;
}
void Update()
{
if (target)
{
RotateTowards(target.position);
}
}
void RotateTowards(Vector3 position)
{
Vector3 direction = position - transform.position;
if (rotateTransform)
{
rotateTransform.rotation = Quaternion.Lerp(rotateTransform.rotation, Quaternion.LookRotation(direction), rotateSpeed);
rotateTransform.eulerAngles = new Vector3(0, rotateTransform.eulerAngles.y, 0) + initialRotation;
}
**///The problem area////**
if (pivotTransform)
{
pivotTransform.rotation = Quaternion.Lerp(pivotTransform.rotation, Quaternion.LookRotation(direction), rotateSpeed);
pivotTransform.eulerAngles = new Vector3(pivotTransform.eulerAngles.x, 0, 0);
}
}
}
Answer by LaneFox · Jul 02, 2015 at 11:30 AM
You're zeroing out the pivot as a worldspace value.
if (pivotTransform)
{
pivotTransform.rotation = Quaternion.Lerp(pivotTransform.rotation, Quaternion.LookRotation(direction), rotateSpeed);
pivotTransform.eulerAngles = new Vector3(pivotTransform.eulerAngles.x, rotateTransform.eulerAngles.y, 0);
}
I just took the rotateTransform Y and used it in the pivotTransform instead of zero. Works fine on my end.
Thanks for your answer :)
I have fixed that issue, so now the head rotates in the direction of the target, but I am still having an issue where the head doesn't pujvot to face the target, it just looks straight down, and raises upwards at the target gets closer.
At first I though the wrong axis was point at the target, but it also raises in the opposite direction. (Shown Here)
It might have something to do with the fact that my turret model was created in Blender, which has the Z and Y axis' flipped. Do you have any suggestions to fix this? I've tried exporting an FBX with the forward and up directions set correctly, but no matter what I do it doesn't change them when imported into Unity.
You can put the model as a child of an empty gameobject, rotate the model 90 degrees and use that container as your pivot object.