x


Disable & Re-enable Script

I have a shooting script. When my ship boosts, I want the player not to be able to fire. The problem is, when I boost, it disables the script, but when I stop boosting, the script doesn't re-enable. How do I do this?

#pragma strict

var projectile : GameObject;
var fireRate : float = 0.5;
private var nextFire : float = 0.0;

function Update () {

    if(Input.GetButton("Fire1") && Time.time > nextFire) {
        nextFire = Time.time + fireRate;
        var clone = Instantiate (projectile, transform.position, transform.rotation);
    }

    if(Input.GetKey("space")) {
        GetComponent(Shoot).enabled = false;
    } 

       if(Input.GetKeyUp("space")) {
        GetComponent(Shoot).enabled = true;
    } 
}

Any idea why?

more ▼

asked Sep 03, 2011 at 05:22 PM

Overlord gravatar image

Overlord
561 225 177 192

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Is this the Shoot script? If it is, it can't enable itself just because it doesn't execute anymore after being disabled. You should not execute the firing code when the button "space" is pressed - maybe returning before shooting, like this:

     if (Input.GetButton("space")) return;
     if (Input.GetButton("Fire1")...

But if this is not the Shoot script, it would be better to use a boolean variable instead of enabling/disabling the whole script - something like this:

    // replace the last two ifs with this statement
    GetComponent(Shoot).disableShooting = Input.GetKey("space");

And in the Shoot script:

var disableShooting: boolean;

function Update(){
    if (disableShooting) return;
    // your shooting code goes here
}

EDITED: You just test if the button "space" is pressed, and do not execute the shooting code if it is, like below:

#pragma strict

var projectile : GameObject;
var fireRate : float = 0.5;
private var nextFire : float = 0.0;

function Update () {
    // if space is pressed, return to abort the rest of Update
    if(Input.GetKey("space")) return; // ends the Update routine
    // if not, execute the rest of Update
    if(Input.GetButton("Fire1") && Time.time > nextFire) {
        nextFire = Time.time + fireRate;
        var clone = Instantiate (projectile, transform.position, transform.rotation);
    }
}
more ▼

answered Sep 03, 2011 at 05:44 PM

aldonaletto gravatar image

aldonaletto
57k 31 79 292

Yeah it's the shoot script. Wait I'm confused about what that means about returning.

Sep 04, 2011 at 07:29 PM Overlord

The instruction return makes Unity return from the routine, which aborts the rest of the code - thus it will not fire when space is pressed. I edited the answer to show the complete script.

Sep 04, 2011 at 08:08 PM aldonaletto

Okay it works. Thanks

Sep 07, 2011 at 03:46 AM Overlord
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

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

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x8821
x4772
x428
x339
x224

asked: Sep 03, 2011 at 05:22 PM

Seen: 4788 times

Last Updated: Sep 07, 2011 at 03:46 AM