function OnTriggerEnter --> if -->if --> Invoke... well, it doesn't work!

I have a function OnTriggerEnter.

Inside this function, there is an if statement and in it there is another if statement.

If the conditions of the 2nd if statement are met, I call an Invoke function which described later in the script.

Well, the invoke function is not invoked (It is supposed to change an object's tag and instantiate a gameObject but nothing happens)...

I've read somewhere that one cannot pass arguments to Invoke (actually I don't know what this means) and was wondering if that has anything to do with this use that I make.

Here is (part of) the script. I have 3 if statements. The 1st if statement has inside it 3 other if statements, the 3d of which tries to invoke the method toggleTagsETC.

function OnTriggerEnter (col: Collider) {

    if (col.gameObject.tag == "Hot" || col.gameObject.tag == "WildCard"){ //if this if statement's conditions are met I call the toggleTagsETC function
        Instantiate(DestroyedSound, transform.position, transform.rotation);
        AnotherScript.ChainCharge +=1;
        Destroy(gameObject);
        if (Time.time-AnotherScript.lastDestructionTime <1){
        Instantiate(chainSound, transform.position, transform.rotation);
        }
        AnotherScript.timeBetweenDestructions = (Time.time-AnotherScript.lastDestructionTime);
        if (Time.time-AnotherScript.lastDestructionTime <1){
        AnotherScript.chainCharger = (1-AnotherScript.timeBetweenDestructions)+AnotherScript.chainCharger;
        } 
        AnotherScript.lastDestructionTime = Time.time;
        if ((AnotherScript.chainCharger > chainTime) && (AnotherScript.frenzyOn== false)){
        Invoke ("toggleTagsETC"); // this is the Invoke that does not get Invoked...
        }
    }

    if (!(col.gameObject.tag in arrayOfGoodColliders)){ //this if statement doesnt't have anything to do with the problem
    Instantiate(BadMoveSound, transform.position, transform.rotation); 
    timesWrongfullyMoved += 1;
    }

    if (timesWrongfullyMoved==3){ //this if statement doesnt't have anything to do with the problem
    timesWrongfullyMoved=0;
    Instantiate(invisibleBarrier, transform.position+Vector3(0,-2,0), transform.rotation);
    Instantiate(invisibleBarrierOnSound, transform.position, transform.rotation); 
    renderer.material.mainTexture = barrierOnTexture;
    Invoke ("RemoveBarrier", barrierEffectDuration);
    }
}

function toggleTagsETC (){ // the method that should be invoked
    Instantiate(superBillboard, Vector3(-3.91,10.514,-0.182), Quaternion.identity);
    Instantiate(chainFullAnnouncementSound, transform.position, transform.rotation); 
    Instantiate(FrenzyOnBillboard, Vector3(-2.126812,-0.002076507,4.278569), transform.rotation); 
    cubeMovementIV.chainCharger  = 0;
    cubeMovementIV.frenzyOn= true;
    cubeMovementIV.timeOfFrenzyOn = Time.time;
    frenzyCube.tag="FrenzyCube";
    yield WaitForSeconds (cubeMovementIV.frenzyDuration);
    frenzyCube.tag="FrenzyCubeOff";
    Instantiate(frenzyOnFalseSound, transform.position, transform.rotation); 

If I replace

Invoke ("toggleTagsETC");

with

toggleTagsETC ();

everything inside "toggleTagsETC" is executed, until the line:

yield WaitForSeconds (cubeMovementIV.frenzyDuration);

Specifically, the following 2 lines are not executed:

frenzyCube.tag="FrenzyCubeOff";
Instantiate(frenzyOnFalseSound, transform.position, transform.rotation); 

After I do as Mike suggested below in his kind comment:

function OnTriggerEnter (col: Collider) {

    if (col.gameObject.tag == "Hot" || col.gameObject.tag == "WildCard"){ //if this if statement's conditions are met I call the toggleTagsETC function
        Instantiate(DestroyedSound, transform.position, transform.rotation);
        AnotherScript.ChainCharge +=1;
        Destroy(gameObject);
        if (Time.time-AnotherScript.lastDestructionTime <1){
        Instantiate(chainSound, transform.position, transform.rotation);
        }
        AnotherScript.timeBetweenDestructions = (Time.time-AnotherScript.lastDestructionTime);
        if (Time.time-AnotherScript.lastDestructionTime <1){
        AnotherScript.chainCharger = (1-AnotherScript.timeBetweenDestructions)+AnotherScript.chainCharger;
        } 
        AnotherScript.lastDestructionTime = Time.time;
        if ((AnotherScript.chainCharger > chainTime) && (AnotherScript.frenzyOn== false)){
        StartCoroutine("toggleTagsETC"); // this is the Invoke that works only until the "yield WaitForSeconds (5.0);" line 
        }
    }

    if (!(col.gameObject.tag in arrayOfGoodColliders)){ //this if statement doesnt't have anything to do with the problem
    Instantiate(BadMoveSound, transform.position, transform.rotation); 
    timesWrongfullyMoved += 1;
    }

    if (timesWrongfullyMoved==3){ //this if statement doesnt't have anything to do with the problem
    timesWrongfullyMoved=0;
    Instantiate(invisibleBarrier, transform.position+Vector3(0,-2,0), transform.rotation);
    Instantiate(invisibleBarrierOnSound, transform.position, transform.rotation); 
    renderer.material.mainTexture = barrierOnTexture;
    Invoke ("RemoveBarrier", barrierEffectDuration);
    }
}

function toggleTagsETC (): IEnumerator { // the method that works only until the "yield WaitForSeconds (5.0);" line
    Instantiate(superBillboard, Vector3(-3.91,10.514,-0.182), Quaternion.identity);//this is executed
    Instantiate(chainFullAnnouncementSound, transform.position, transform.rotation); //this is executed
    Instantiate(FrenzyOnBillboard, Vector3(-2.126812,-0.002076507,4.278569), transform.rotation); //this is executed
    AnotherScript.chainCharger  = 0;//this is executed
    AnotherScript.frenzyOn= true;//this is executed
    AnotherScript.timeOfFrenzyOn = Time.time;//this is executed
    frenzyCube.tag="FrenzyCube";//this is executed
    yield WaitForSeconds (5.0);//this is NOT executed
    frenzyCube.tag="FrenzyCubeOff";//this is NOT executed
    Instantiate(frenzyOnFalseSound, transform.position, transform.rotation); //this is NOT executed
}

the problem persists as shown in the commented lines above

Invoke doesn't work with coroutines - use StartCoroutine("toggleTagsETC"); if you want to invoke a coroutine by the name of the function instead of just calling it yourself

Secondly, I would also change

function toggleTagsETC (){

to

function toggleTagsETC () : IEnumerator {

so Unity knows for sure it's a coroutine. Try the first tip first though, in case that alone fixes it

Put everything inside toggleTagsETC() inside:

while(true){
    //code goes here
    yield;
}

like this:

function toggleTagsETC (){
    while(true){
        Instantiate(superBillboard, Vector3(-3.91,10.514,-0.182), Quaternion.identity);
        Instantiate(chainFullAnnouncementSound, transform.position, transform.rotation); 
        Instantiate(FrenzyOnBillboard, Vector3(-2.126812,-0.002076507,4.278569), transform.rotation); 
        cubeMovementIV.chainCharger  = 0;
        cubeMovementIV.frenzyOn= true;
        cubeMovementIV.timeOfFrenzyOn = Time.time;
        frenzyCube.tag="FrenzyCube";
        yield WaitForSeconds (cubeMovementIV.frenzyDuration);
        frenzyCube.tag="FrenzyCubeOff";
        Instantiate(frenzyOnFalseSound, transform.position, transform.rotation);
        yield;
    }
}

And don't use invoke, just use toggleTagsETC(); Also, try to use CamelCase for method and function names, and camelCase for variables and properties.