Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 NightmaresDev · Oct 11, 2017 at 03:46 PM · c#2dshootingenemy ai

Enemy Shooting In wrong Direction.

I am creating a 2D Top-Down RPG game. And I have an error with the Enemy Shooting! The Bullet that is being Instantiated is not actually aiming at the player's position, but rather somewhere randomly on the Screen. I was not yet able to figure where the enemy is shooting nor why it is shooting somewhere else. What is supposed to happen is that the Bullet would be shot in the Direction of the Player... but obviously it doesn't.

Thanks for any help I get.

This is the Enemy Shoot Script!

   public float bulletSpeed;
     public float fireRate;
     public float nextFire = 1;
 
     public GameObject bullet;
 
     Transform enemyBullet;
     Transform playerPosition;
     public Transform shootPoint;
 
 
 
     private void Awake()
     {
         if (!playerPosition)
         {
             playerPosition = GameObject.FindWithTag("Player").transform;
         }
     }
 
     // Use this for initialization
     void Start () {
         
     }
     
     // Update is called once per frame
     void Update () {
         if (playerPosition)
         {
             if (Time.time >= nextFire)
             {
                 nextFire = Time.time + fireRate;
                 CreateBullet();
             }
         }
     }
 
     void CreateBullet()
     {
         Instantiate(bullet, shootPoint.position, shootPoint.rotation);
     }


And this is the actual Bullet Script! (This goes on the Bullet)

     public int Speed;
     public Rigidbody2D myRigid;
 
     public float lifeTime;
     public GameObject playerPosition;
 
     
 
 
     void Start()
     {
         transform.LookAt(playerPosition.transform);
         myRigid = GetComponent<Rigidbody2D>();
         playerPosition = GameObject.FindWithTag("Player");
 
         Vector2 sp = playerPosition.transform.position;
         Vector2 dir =  sp.normalized;
         myRigid.AddForce(dir * Speed);
 
     }
 
     // Update is called once per frame
     void Update()
     {
         Destroy(gameObject, lifeTime);
     }
Comment
Add comment · Show 6
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 TreyH · Oct 11, 2017 at 07:02 PM 0
Share

Well, I think this is your problem:

 Vector2 sp = playerPosition.transform.position;
 Vector2 dir =  sp.normalized;
 myRigid.AddForce(dir * Speed);

The direction needs to be the difference between the projectile and the target, not the target's position. Setting direction as the position of your target is going to give you a nonsensical value, as I'm sure you've noticed.

Try:

 Vector2 targ = playerPosition.transform.position;
 Vector2 proj = myRigid.transform.position;
 
 Vector2 dir =  (targ - proj).normalized;
 myRigid.AddForce(dir * Speed);


avatar image NightmaresDev TreyH · Oct 11, 2017 at 09:02 PM 0
Share

I did as you have said but now there is a different Error. It seems to be that for 1 The bullets are visible but 2. they aren't moving anywhere and 3. It doesn't seem like all the bullets were ai$$anonymous$$g at the player at all. Also, they where all spawning in 1 area (Next to the Sheep)

alt text

screenshot-11.png (110.6 kB)
avatar image Trebbit NightmaresDev · Oct 11, 2017 at 09:10 PM 0
Share

the spawn position has to do with that you don't update the shoot position so this stays the same also the bullets have rigibody's?

Show more comments

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Birdman1011395 · Oct 11, 2017 at 08:59 PM

@TreyH hit the nail on the head with what the main issue is: you're using a position vector when you should be using a normalized direction vector. Leaf through the Vector Cookbook section should help you get a handle on things.

That said, there's a lot of issues with your setup otherwise. You shouldn't be using Transform.LookAt(Vector3) in 2D, because it rotates the transform so that its z-axis is pointing at the target. This will cause your bullet to, effectively, disappear from the screen. Also, you only need to flag the bullet for destruction once not, not every frame, so you can remove Update() and put your Destroy() call at the end of start.

All that said, the biggest question is why does BulletScript exist? All it's doing is launching your bullet and flagging it for destruction. I'd move the firing logic for your bullet to the shooter script, because the shooter should be choosing where the bullet goes, not the bullet. You can also easily get the direction vector from the shooter's transform using the right or up variables, if the shooter is tracking the player.

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

Answer by Trebbit · Oct 11, 2017 at 08:09 PM

maybe it is to simple but try to first assign player position and after that you set your transform.lookat like this the code I attached. Because the first time player position is empty so it will always lookat (0,0,0)

  void Start()
      {
          playerPosition = GameObject.FindWithTag("Player");
          myRigid = GetComponent<Rigidbody2D>();
          transform.LookAt(playerPosition.transform);
          Vector2 sp = playerPosition.transform.position;
          Vector2 dir =  sp.normalized;
          myRigid.AddForce(dir * Speed);
  
      }
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 NightmaresDev · Oct 11, 2017 at 08:58 PM 0
Share

I can't really tell if this works because now, the Bullets are rotated in a Way that I can Not see them, and also for some reason the Bullets do not seem to move a single bit too. alt text

screenshot-10.png (69.9 kB)

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

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

2d enemy ai 0 Answers

RayCast2D direction is always showing origin point(0,0,0) on game and ignores direction Vector2D.(Unity 2017.4.7.f1) 0 Answers

Cinemachine camera rotating with player 2D 1 Answer

Multiple Cars not working 1 Answer

Transform.translate bullets problem 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