• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Jackv949 · Jul 02, 2015 at 11:01 AM · rotationlookatturretlookrotation

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);
         }
     }
 }
 
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

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.

Comment
Add comment · Show 4 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Jackv949 · Jul 02, 2015 at 10:40 PM 0
Share

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)

avatar image LaneFox · Jul 02, 2015 at 10:47 PM 0
Share

The above change made the my test turret work perfectly.

avatar image Jackv949 · Jul 03, 2015 at 04:16 AM 0
Share

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.

avatar image LaneFox · Jul 03, 2015 at 02:44 PM 0
Share

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.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

22 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Rotation via iTween.LookTo not working (or using it wrong) 1 Answer

My look at script not working? 0 Answers

LookRotation is Returning Weird Values 0 Answers

Camera following/looking at aircraft 1 Answer

"Look rotation viewing vector is zero" error 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges