Im new to Unity and im trying to make a way for me to switch between a fireball and a Shuriken(ninja star). The switching part works perfectly, but once I press the button it shoots an infinite non-stopping stream of fireballs or Shhuriken. PLEASE HELP! How do I stop the infinite stream of projectiles?
#pragma strict
var shurbullet : Transform;
var fireballbullet : Transform;
var weaponnumber;
function Start () {
}
function Update ()
{
if(weaponnumber == 1){
var sfire = Instantiate (shurbullet,gameObject.Find("bullet_SpawnPoint").transform.position,Quaternion.identity);
sfire.rigidbody.AddForce(transform.forward*200);
}
if(weaponnumber == 2){
var firebullet = Instantiate (fireballbullet, gameObject.Find("bullet_SpawnPoint").transform.position,Quaternion.identity);
firebullet.rigidbody.AddForce(transform.forward*500);
}
//1st weapon
if(Input.GetKeyUp("f")){
weaponnumber = 1;
}
//2nd weapon
if(Input.GetKeyUp("2")){
weaponnumber = 2;
}
}
Nowhere in your code do you set weaponnumber
back to zero. If weaponnumber
is 1 or 2, then you fire a projectile. Since there is no way for this variable to every change back to zero, every frame you fire a new projectile. I’d do something like:
function Update ()
{
//1st weapon
if(Input.GetKeyUp("f")){
var sfire = Instantiate (shurbullet,gameObject.Find("bullet_SpawnPoint").transform.position,Quaternion.identity);
sfire.rigidbody.AddForce(transform.forward*200);
}
//2nd weapon
if(Input.GetKeyUp("2")){
var firebullet = Instantiate (fireballbullet, gameObject.Find("bullet_SpawnPoint").transform.position,Quaternion.identity);
firebullet.rigidbody.AddForce(transform.forward*500);
}
}
This way it’s only when you release the key that something gets fired.
move the if else shooting part into a shoot() function that is called when the button was pressed. Otherwise the shooting part is called every frame.
function Update ()
{
//1st weapon
if(Input.GetKeyUp("f")){
weaponnumber = 1;
shoot();
}
//2nd weapon
if(Input.GetKeyUp("2")){
weaponnumber = 2;
shoot();
}
//Alternative methode
//weaponnumber = 0;
}
function shoot()
{
if(weaponnumber == 1){
var sfire = Instantiate (shurbullet,gameObject.Find("bullet_SpawnPoint").transform.position,Quaternion.identity);
sfire.rigidbody.AddForce(transform.forward*200);
}
if(weaponnumber == 2){
var firebullet = Instantiate (fireballbullet, gameObject.Find("bullet_SpawnPoint").transform.position,Quaternion.identity);
firebullet.rigidbody.AddForce(transform.forward*500);
}
}
Alternatively you can reset the weaponnumber at the end of each frame to 0, but that is very bad design imo.