Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • 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 wjordan · Jun 06, 2014 at 06:11 AM · c#quaternionrotateturret

Object won't rotate correctly

I have 2d turret that is suppose to follow a player as seen in the image. alt text

I tried a couple ways to get this to work, but both ways aren't giving me the desired results.

The first way flips my turret image horizontally, instead of letting it rotate in its original position.

 public Transform target;
 
 Quaternion rotation = Quaternion.LookRotation
         (target.transform.position - transform.position, transform.TransformDirection(Vector2.up));
         transform.rotation = new Quaternion (0, 0, rotation.z, rotation.w);

My second attempt worked perfectly, but the turret follows the mouse and not the player. Maybe I would have to change the Input.mousePosition part to something else, but I'm not sure at this point.

 Vector3 diff = Camera.main.ScreenToWorldPoint (Input.mousePosition) - transform.position;
         diff.Normalize ();
         float rot_z = Mathf.Atan2 (diff.y, diff.x) * Mathf.Rad2Deg;
         transform.rotation = Quaternion.Euler (0f, 0f, rot_z - 90);

I've also tried the LookAt method, but that flips my turret image into a different position as well. Any help would be greatly appreciated.

image.jpg (36.7 kB)
Comment
Add comment · Show 1
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 Dazdingon · Jun 06, 2014 at 08:09 AM 0
Share

You can use the LookAt method (or any other script), then put the script onto an empty GameObject, parent your turret to the game empty, rotate the turret inside it's parent so that it works correctly.

2 Replies

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

Answer by Dazdingon · Jun 06, 2014 at 06:41 AM

Assuming that you are using the x and y axis for movement.

You could use :

 transform.LookAt(Vector3.back, target.position);

Or you could use :

 Vector3 direction = this.transform.position - target.position;

 float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg + 90;

 // ajust the angle at a speed of rotateSpeed (float)
 angle = Mathf.MoveTowardsAngle(this.transform.eulerAngles.z, angle, Time.deltaTime * rotateSpeed);

 this.transform.rotation = Quaternion.Euler(0, 0, angle);
Comment
Add comment · Show 1 · 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 wjordan · Jun 06, 2014 at 03:53 PM 0
Share

Thanks. Worked perfectly!

avatar image
0

Answer by pacific00 · Jun 06, 2014 at 06:54 AM

itd be much more easier if you could fix center of the turret at its rear end..

Comment
Add comment · 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

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.

Follow this Question

Answers Answers and Comments

23 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 avatar image

Related Questions

Multiple Cars not working 1 Answer

Inheritance code acts differently (Quaternion.LookRotation) 0 Answers

Rotating a model with increments 1 Answer

Tilt object x degrees, smoothly 0 Answers

Rotate Turret where touched (top down view) 1 Answer


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