• 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 /
  • Help Room /
avatar image
0
Question by johnnydev1 · Feb 16, 2016 at 07:50 PM · 2d gameshootingfollow player

2D Gun following rotation problem

I'm trying to implement an enemy that patrols left and right, changes direction when it hits specific invisible checkpoints. The enemies have a child gun object that follows the player spaceship and fires when in range. This works fine until the enemy hits the their checkpoint and change the transform.localscale direction. The following attached gun that "follows" the player inverts it's direction until it once again changes direction back to original. End result is that when enemy moves right, it follows perfectly, when it moves left, it's follow inverts.

Enemy Move Script:

 public class enemypatrol : MonoBehaviour {
 
     public float moveSpeed;
     public bool moveRight;
     Rigidbody2D enemyrb2d;
 
     public Transform wallCheck;
     public float wallCheckRadius;
     public LayerMask whatIsWall;
     public bool hittingWall;
 
     // Use this for initialization
     void Start () {
         moveRight = true;
         enemyrb2d = GetComponent<Rigidbody2D>();
     }
     
     // Update is called once per frame
     void Update () {
 
         hittingWall = Physics2D.OverlapCircle(wallCheck.position, wallCheckRadius, whatIsWall);
 
         if (hittingWall)
         {
             moveRight = !moveRight;
         }
 
         if (moveRight)
         {
             transform.localScale = new Vector3(1f, 1f, 1f);
             enemyrb2d.velocity = new Vector2(moveSpeed, enemyrb2d.velocity.y);
         }
         else {
             transform.localScale = new Vector3(-1f, 1f, 1f);
             enemyrb2d.velocity = new Vector2(-moveSpeed, enemyrb2d.velocity.y);
         }
     }

Gun Rotation Script

 public class gunrotation : MonoBehaviour {
 
     public Transform target;
     public int rotationOffset = -90;
 
     // Use this for initialization
     void Start () {
     
     }
     
     
     void Update () {
         Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
         
         Vector3 difference = target.position - transform.position;
         
         float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;  
         
         transform.rotation = Quaternion.Euler(0f, 0f, rotZ + rotationOffset);
         
     }
Comment
Add comment · Show 3
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 Taxen0 · Feb 16, 2016 at 09:42 PM 0
Share

Cant you change direction without changing local scale? That is what makes you have this issue

avatar image johnnydev1 Taxen0 · Feb 17, 2016 at 01:03 AM 0
Share

Yes that solves the gun rotation problem. $$anonymous$$y enemy sprite isn't flipping to face other direction in that case which I'll have to fix somehow

avatar image Taxen0 johnnydev1 · Feb 17, 2016 at 09:18 PM 0
Share

There might be some other clever way of doing this but the easiest would be ta make 2 animations. One moving right and one moving left and use the animation system to change the states.

This way you change the actual image and not the transform

0 Replies

· Add your reply
  • Sort: 

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

45 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 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

how do i make my immovable 'empty gameobject spawnpoint' shoot bullets in the direction of my crosshair? 0 Answers

Shooting animation and bullet generation issue 0 Answers

Fire projectile towards mouse position top-down 2D 0 Answers

How to aim at crosshair in a 2D game? 0 Answers

How do I adjust the direction of my game object in the direction my player turns? 0 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