- Home /
Enemy Aims at Player's Current Position
Hello,
I've run into an issue that I have not been able to solve. I'm making a side-scrolling space shooter (think r-type) I'm trying to get enemy ships to fire a projectile at the players current position. Keep in mind I do not wish for the projectile to follow the player like a homing missle, basically the projectile should instantiate, take the players positions and send the projectile in the players direction. Here is the script I am currently using,
public var ebullet:Transform;
public var projectileSpeed:float = 0.0;
public var delay:float = 0.0;
public var weaponSpeed:float = 0.0;
private var bulletCount:int = 0;
function OnTriggerEnter(col:Collider){
if(col.gameObject.tag == "Player"){
InvokeRepeating("Shoot", delay, weaponSpeed);
}
}
function OnTriggerExit(col:Collider){
if(col.gameObject.tag == "Player"){
CancelInvoke("Shoot");
}
}
function Shoot(){
var shoot = Instantiate(ebullet, transform.position, transform.rotation);
shoot.rigidbody.AddForce(-transform.right * projectileSpeed * 1000);
}
So far I've tried a few things and nothing has worked the way I'd like. The closest I have come was adding the players position into AddForce but as you can imagine that did not work out.
Answer by fredpointzero · Aug 25, 2011 at 08:09 AM
transform.right
will shoot at the right direction of your shooter, and that's not what you want.
Try this:
public var ebullet:Transform;
public var projectileSpeed:float = 0.0;
public var delay:float = 0.0;
public var weaponSpeed:float = 0.0;
private var bulletCount:int = 0;
// Current player variable
private var player:GameObject = null;
function OnTriggerEnter(col:Collider)
{
if(col.gameObject.tag == "Player")
{
// Store current player
// NB this assume that you have only one player because it will overwrite second player
player = col.gameObject;
InvokeRepeating("Shoot", delay, weaponSpeed);
}
}
function OnTriggerExit(col:Collider)
{
if(col.gameObject.tag == "Player")
{
// Remove reference
player = null;
CancelInvoke("Shoot");
}
}
function Shoot()
{
var shoot = Instantiate(ebullet, transform.position, transform.rotation);
// Set projectile velocity
shoot.rigidbody.velocity = (player.transform.position - transform.position).normalized * projectileSpeed;
}
It store the current player and set the velocity towards the current's player position
That worked like a charm sir! I do realize that transform.right is not what I wanted however it's all I had to work with at the time. Thank you :D.
Your answer
![](https://koobas.hobune.stream/wayback/20220612191634im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How to avoid speed change in bullets while moving? 1 Answer
3rd Person Gun Aim 1 Answer
How can i fix this shooting code in a 2D plane? 0 Answers
Projectile move towards mouse cursor 3 Answers
Make multiple Projectiles move at the same Time... 0 Answers