How to check for prefab before instantiating new one

Hi there,

I’m making a game with a cannon which fires cannonballs, and want to only be able to fire a new cannonball once the current one has been destroyed (which happens if it falls of the platform).

I’m guessing I’d have to detect if the gameObject exists in the scene, then use an if statement, but i’m not sure how to integrate this into my code:

var fullWidth : float = 256;
 
//create a boolean flag we can use to stop and start the choosing of power
var choosing : boolean = false;
 
//create a private variable (not shown in inspector) to store the current set power
private var thePower : float;
 
//create a slot to assign my ball prefab to.
var ball : Rigidbody;
 
//create a slot to assign an empty game object as the point to spawn from
var spawnPos : Transform;
 
// create a number to multiply the force by as the value of up to 256 may not be enough to
// effectively shoot a ball forward
var shotForce : float = 5; 

private var tapCountIsOne : boolean = false;
 
function Update () { 

 
 // detect if key is released and then call the Shoot function, passing the current
 // value of 'thePower' variable into it's 'power' argument
 if(Input.touchCount > 0 && tapCountIsOne == false){  
 Debug.Log(Input.touchCount);
 tapCountIsOne = true;
  Shoot(thePower);
 }
 
 if(!choosing){
  //create a power variable and set it to ping pong function
  //from current time to 1, and multiply that by a number (or variable holding a number)
  thePower = Mathf.PingPong(Time.time, 1) * fullWidth;
 
  //set the width of the GUI Texture equal to that power value
  guiTexture.pixelInset.width = thePower; 
  
  }else if(Input.touchCount == 0){
  tapCountIsOne = false;
  }

  
 }

 
// start the 'Shoot' custom function, establish a
// float variable to be fed with a number when function is called
function Shoot(power : float){
 //stop the power being changed whilst we shoot a ball by setting choosing boolean to true
 choosing = true;
 
 //create a ball, assign the newly created ball to a var called pFab
 var pFab : Rigidbody = Instantiate(ball, spawnPos.position, spawnPos.rotation);
 
 //find the forward direction of the object assigned to the spawnPos variable
 var fwd : Vector3 = spawnPos.forward;
 pFab.AddForce(fwd * power*shotForce);
 
 //pause before resuming the power bar motion
 yield WaitForSeconds(2);
 
 //reset choosing to restart the power bar motion
 choosing = false;
 

 
}

My cannonball is called ball, with the tag “Player” if that helps.

Does anyone know how to do this?

Thanks in advance.

One way to do it is to use a boolean

    // boolean flag to show that a cannonBall is created
    var cannonBallCreated : boolean = false;

And then check for that variable when you want to shoot

// detect if key is released and then call the Shoot function, passing the current
 // value of 'thePower' variable into it's 'power' argument
 if(Input.touchCount > 0 && tapCountIsOne == false && !cannonBallCreated){  
 Debug.Log(Input.touchCount);
 tapCountIsOne = true;
  Shoot(thePower);
 }

Next, Have a script in ball prefab that destroys itself when it collides with the platform. Before destroying it, it should set the boolean back to false so that the next cannon ball can be created.