- Home /
Problem with turret over moving ship
Hi
I have a script to aim a turret with the mouse (in a first person view) and it works ok, the problem is that the turret is in a spaceship and this one can also rotate so when this happens, the turret's platform starts aiming in weird directions. This is a sample of my code:
public void AimTurret(){
ray = turretCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0.0f));
//Horizontal
targetPosition = ray.GetPoint(range);
targetPosition.y = 0.0f;
hRotation = Quaternion.LookRotation((targetPosition - hPlatform.position).normalized);
aux = Mathf.Min(hRotationSpeed * Time.deltaTime, 1.0f);
hPlatform.rotation = Quaternion.Lerp(hPlatform.rotation, hRotation, aux);
}
I'm pretty sure the problem is that I'm putting a 0 in the y axis (so the turret platform rotates in a single axis) so what I need to know is what should I put here instead of a zero if I want the platform's turret to keep parallel/horizontal to the ship while conserving it's axis.
I hope I was clear, Thanks.
Answer by robertbu · Dec 06, 2013 at 04:54 AM
An approach that solves this problem is to project your target position on to a xz plane of the ship before calculating the look rotation. Here is another question with the same answer:
http://answers.unity3d.com/questions/553180/turret-lookrotation-problem.html
While I suggest in that answer that Math3D can be used, the ProjectPointOnPlane() function can be rewritten down to just two lines. Here are the two lines pulled from a different answer:
var distanceToPlane = Vector3.Dot(trans.up, target.position - trans.position);
var planePoint = target.position - trans.up * distanceToPlane;
Note that 'trans' here is the transform of the ship that the turret rests on.
Your answer
Follow this Question
Related Questions
Look at mouse problem 1 Answer
How to rotate cannon by angles on top of a turret 1 Answer
Autoaiming Turret Cannon? 3 Answers
Turret + Cannon Mouse movement 1 Answer
Turrets |Aiming don't work 1 Answer