- Home /
 
 
               Question by 
               Zero23ku · Feb 10, 2017 at 10:12 AM · 
                scripting problemmovementbullets  
              
 
              How to make a bullet move toward player and keep moving past him
I'm trying to make an enemy to shoot bullets toward the player and it kinda works, but it stop when reach the player position.
Here's the code.
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class EnemyTwoBulletScript : MonoBehaviour {
 
     public float bulletDamage;
 
     private float bulletSpeed = 9.5f;
     private float spriteWithDelta;
     //private Rigidbody2D bulletBody;
     private Transform playerTransform;
     private Transform selfTransform;
     private Vector3 playerPosition;
 
 
     // Use this for initialization
     void Start() {
         //bulletBody = GetComponent<Rigidbody2D>();
         spriteWithDelta = GetComponent<SpriteRenderer>().bounds.size.x / 2;
         playerTransform = GameObject.FindWithTag("Player").GetComponent<Transform>();
         playerPosition = playerTransform.position;
         selfTransform = GetComponent<Transform>();
 
     
     }
     // Update is called once per frame
     void Update () {
         selfTransform.position = Vector3.MoveTowards(selfTransform.position,playerPosition,bulletSpeed*Time.deltaTime);
     }
 }
 
              
               Comment
              
 
               
               
               Best Answer 
              
 
              Answer by Hellium · Feb 10, 2017 at 10:13 AM
You have to use a direction vector instead of the MoveTowards function. It can be easily done as follow :
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class EnemyTwoBulletScript : MonoBehaviour {
 
     public float bulletDamage;
 
     private float bulletSpeed = 9.5f;
     private float spriteWithDelta;
     //private Rigidbody2D bulletBody;
     private Transform playerTransform;
     private Transform selfTransform;
     private Vector3 playerPosition;
     private Vector3 direction ;
 
 
     // Use this for initialization
     void Start() {
         //bulletBody = GetComponent<Rigidbody2D>();
         spriteWithDelta = GetComponent<SpriteRenderer>().bounds.size.x / 2;
         playerTransform = GameObject.FindWithTag("Player").GetComponent<Transform>();
         bulletSpeed = 9.5f;
         playerPosition = playerTransform.position;
         selfTransform = GetComponent<Transform>();
         direction = (playerPosition - selfTransform.position).normalized ;
 
     }
     // Update is called once per frame
     void Update () {
         selfTransform.position += direction * bulletSpeed * Time.deltaTime;
     }
 }
 
              Your answer