turret not facing correct rotation
Hi there, I am trying to create a basic 3D platform game including a turret to face the player direction. I am relatively new to unity and C# in general and I am having difficulty with quaternions.
I have enabled an awake animation for my turret followed by the turret rotating in relation to the player position however, when pressing play, the turret appears to be 90 degrees off on the X-axis.
I have tried adjusting the original turret position and adjusting where I thought would help in the code such as the rotation.x = 0 but to no avail. (in fact in most cases it made the angulation worse).
I have looked into quaternions and I am starting to get to grips with the basic although I still find them complicated. I imaging there is a relatively easy adjustment to my code to get the correct direction but I just can't find it.
Any help with this would be greatly appreciated
public class Turret : MonoBehaviour
{
//floats
public float distance;
public float wakeRange;
public float turretSpeed;
//booleans
public bool awake = false;
//references
public Transform target;
public Animator anim;
void Awake()
{
anim = gameObject.GetComponent<Animator>();
}
void Update()
{
anim.SetBool("Awake", awake);
RangeCheck();
if (awake)
{
{
//Rotate turret to look at player.
Vector3 relativePos = target.position - (transform.position);
Quaternion rotation = Quaternion.LookRotation(relativePos);
rotation.x = 0;
rotation.z = 0;
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * turretSpeed);
}
}
}
void RangeCheck()
{
distance = Vector3.Distance(transform.position, target.transform.position);
if (distance < wakeRange)
{
awake = true;
}
if (distance > wakeRange)
{
awake = false;
}
}
Thanks for your time
Answer by Shire_ · May 05, 2016 at 08:57 PM
Solution used: Object was created in blender so could be altered in blender. I didn't realise that changing the rotation in blender would resolve the issue but it did.
Answer by FortisVenaliter · May 05, 2016 at 06:58 PM
You can premultiply with a 90 degree rotation on the x-axis to neutralize the error, if it's constant. Something like this:
rotation = rotation * Quaternion.Euler(90,0,0);
In the end I changed the initial position in the blender file by 90 degrees ins$$anonymous$$d, i didn't realise that this would make a difference but thanks for your input!
Answer by Ryanless · May 05, 2016 at 07:09 PM
you can try the build in function lookAt, which makes the object automaticly look at the target, though you cant have a turret speed then.
transform.LookAt(target.transform);
The turret speed is something i really wanted to keep but thanks for yoru input