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 Vice_Versa · Sep 04, 2018 at 12:48 AM · c#rotationrigidbodylookatlookrotation

Bullet not moving towards player

Im making a space shooter game, and I have enemys that shoot at the player, and the bullets are a bullet supposed to move towards the player. It moves NEAR the player, but not actually TOWARDS it. No matter what part of the screen the player is at (think star fox style), the enemy bullets are never actually hitting the player if hes standing still. heres my code using System.Collections; using System.Collections.Generic; using UnityEngine;

 public class enemyBullet : MonoBehaviour {
     public float speed = 30;
     public GameObject player;
     Vector3 targetLocation;
 
     // Use this for initialization
     void Start () {
         player = GameObject.FindWithTag("shootPoint");
         Debug.Log(player.gameObject.name); 
         targetLocation = player.transform.position;
         setRotation();
 
     }
     
     // Update is called once per frame
     void Update () {
         GetComponent<Rigidbody>().velocity = transform.forward * speed;
     }
 
     void setRotation()
     {
         targetLocation = new Vector3(targetLocation.x, targetLocation.y, player.transform.position.z - 2);
         transform.LookAt(targetLocation);
     }
 
     IEnumerator setRotationAgain()
     {
         yield return new WaitForSeconds(1f);
         setRotation();
     }
 }
 
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

3 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Atiyeh123 · Sep 04, 2018 at 11:24 AM

Hi, 1.There is no need for GetPlayerWithTag when its public , you can attach gameobject in editor. 2.I can not see any example when placing GetComponent in update is unavoidable , aasign it on start or Awake. Cache it once, or as little as possible. It is a costly venture to the engine. 3. your problem is with this line:

       targetLocation = new Vector3(targetLocation.x, targetLocation.y, player.transform.position.z - 2);//why -2 ??

or maybe int your enemy rigidbody you freeze the x , y position! I've Corrected the code :

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class OnCollide : MonoBehaviour {
 
         public float speed = 2;
         public GameObject player;
         Vector3 targetLocation;
         Rigidbody rb;
         // Use this for initialization
         void Start()
         {
             rb = GetComponent<Rigidbody>();
             targetLocation = player.transform.position;
             transform.LookAt(player.transform);
             rb.velocity = transform.forward * speed;//Velocity Dont need to be in update
 
         }
         void Update()
         {
         //alternative ways
         // 1.   transform.position += transform.forward * speed * Time.deltaTime;
         // 2.   rb.MovePosition(rb.position + transform.forward * Time.deltaTime);
         //translate ,movetowards ,....
 
         }
 
         void setRotation()
             {
                 targetLocation = new Vector3(targetLocation.x, targetLocation.y, player.transform.position.z - 2);//why -2 ??
                 transform.LookAt(targetLocation);
             }
 
             IEnumerator setRotationAgain()
             {
                 yield return new WaitForSeconds(1f);
                 setRotation();
             }
     
 }
 

Also i've attached the test project below link text


test.zip (21.8 kB)
Comment
Add comment · Show 3 · 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 Vice_Versa · Sep 06, 2018 at 03:21 AM 0
Share

thanks for the reply, a couple of things: 1. I used GetPlayerWithTag because this is a bullet that gets spawned in the game, not something thats already in the scene. I know theres several other ways of doing it but that doesnt really matter 2. I know it can be a variable, I was just lazy 3. I believe the reason for the -2 in the targetLocation line is because the player is contantly moving forward, and the enemies stay a certain distance away from the player so they are constantly moving backwards as well. I probably should have mentioned that part in the description and I think its the reason why the bullets keep going behind him, Originally we had the target location being set in update but that made the bullets follow and become unavoidable, We used Start() because we want them to shoot at where the player is, but theyll have enough time to move out of the way. The issue here is that when the player is completely still, the bullets arent moving to the players location, they are either above/below/right/left of where he is.

avatar image Atiyeh123 Vice_Versa · Sep 06, 2018 at 05:43 PM 0
Share

1.you can just make bullet prefab and attach bullet prefab to public variable(it's more performant).i know it's not the problem , it's just a suggestion.

your problem:

So if you want 2 points distance from enemy you cant put rb.velocity int start. i correct my previous code.

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class OnCollide : $$anonymous$$onoBehaviour
 {
 
     public float speed = 2;
     public GameObject player;
     Vector3 targetLocation;
     Rigidbody rb;
     // Use this for initialization
     void Start()
     {
         rb = GetComponent<Rigidbody>();
         targetLocation = player.transform.position;
         setRotation();
     
     }
     void Update()
     {
         setRotation();
         transform.position += transform.forward * speed * Time.deltaTime;
     }
 
     void setRotation()
     {
         targetLocation = new Vector3(player.transform.position.x - 2, targetLocation.y, player.transform.position.z - 2);
         transform.LookAt(targetLocation);
     }
 
     IEnumerator setRotationAgain()
     {
         yield return new WaitForSeconds(1f);
         setRotation();
     }
 
 }
 



avatar image Atiyeh123 Atiyeh123 · Sep 06, 2018 at 05:49 PM 0
Share

but its not a good way to chasing player.if enemy always keep a constant distance from player you can set enemy child of player . you can also raycast from enemy to player too.(just search chasing player simple ai , there are good tutorials availables on youtube about it)

avatar image
0

Answer by madks13 · Sep 06, 2018 at 08:17 AM

Umm, if it's like star fox, i'd suggest you don't move the player forward at all, unless it can be done with input. Instead, add the environment as children to an empty object that will be moved around the player. As for the enemies, in this kind of game, the enemies are usually scripted. Meaning they don't do random things, so you can plot out their movement around the player's position, rather than constantly keeping them at a distance of the player. This way, you won't have to compensate for player movement much either, only the horizontal and vertical movement, but no forward/backward movement.

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 Vice_Versa · Sep 07, 2018 at 04:22 PM

in case anyones wondering, I tried both versions of the code posted above, neither worked. here is the current code that Im trying to use using System.Collections; using System.Collections.Generic; using UnityEngine; public class enemyBullet : MonoBehaviour { public float speed = 2; public GameObject player; Vector3 targetLocation; // Use this for initialization void Start () { player = GameObject.FindWithTag("shootPoint"); targetLocation = player.transform.position; setRotation(); GetComponent<Rigidbody>().AddForce(transform.forward * speed, ForceMode.Impulse); } void setRotation() { targetLocation = new Vector3(targetLocation.x, targetLocation.y, targetLocation.z); transform.LookAt(targetLocation); } } when I pause the game I can clearly see that the forward Vector is pointed directly at the player, but the bullet is not moving that way. This truely makes no sense to me, This bug has been persistant for weeks for a very very basic script.

Comment
Add comment · Show 2 · 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 Atiyeh123 · Sep 09, 2018 at 09:50 AM 0
Share

I've Tested both posted codes and they work fine.I don't know why you don't search (chasing player youtube) to see the tutorials! This link covers your question link text

avatar image madks13 · Sep 10, 2018 at 12:08 PM 0
Share

Err, this is clearly weird. The code is too simple to fail doing what it's supposed to do. So please check that you don't have other scripts affecting your bullets in some weird way. That is the only possibility i see.

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

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

Look Rotation flipping object rotation after 180 degrees 1 Answer

Flip over an object (smooth transition) 3 Answers

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

Rotate player (rigidbody) towards his movement 2 Answers

Rotation using Unity2D 3 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