Script kills fps! help!

Hi there!
(sorry for my bad english, I’m not american)
I have big trouble. My script kills fps. I have one big scene, which links with all levels (there are 20 portals), like a Spyro games, you know. Scipt working with PlayerPrefs - he detects if one level reached, then he opens next portal in main world scene and show on GUI texture of Crystals, if you collect them. As result I got 25-30fps in my game. I try to deactivate my script and a get +10-12fps. How I can optimized my script? I’m noob in scripting, sorry.

Here is

var YellowUnlocked : Texture2D;
var level1Locked : Texture2D;
var Level2Gate : GameObject;
var Level3Gate : GameObject;
var Level4Gate : GameObject;
var Level5Gate : GameObject;
var Level6Gate : GameObject;
var Level7Gate : GameObject;
var Level8Gate : GameObject;
var Level9Gate : GameObject;
var Level10Gate : GameObject;
var Level11Gate : GameObject;
var Level12Gate : GameObject;
var Level13Gate : GameObject;
var Level14Gate : GameObject;
var Level15Gate : GameObject;
var Level16Gate : GameObject;
var Level17Gate : GameObject;
var Level18Gate : GameObject;
var Level19Gate : GameObject;
var Level20Gate : GameObject;
var LOCK2 : GameObject;
var LOCK3 : GameObject;
var LOCK4 : GameObject;
var LOCK5 : GameObject;
var LOCK6 : GameObject;
var LOCK7 : GameObject;
var LOCK8 : GameObject;
var LOCK9 : GameObject;
var LOCK10 : GameObject;
var LOCK11 : GameObject;
var LOCK12 : GameObject;
var LOCK13 : GameObject;
var LOCK14 : GameObject;
var LOCK15 : GameObject;
var LOCK16 : GameObject;
var LOCK17 : GameObject;
var LOCK18 : GameObject;
var LOCK19 : GameObject;
var LOCK20 : GameObject;
var LOCK21 : GameObject;
var LOCKBONUS1 : GameObject;
var LOCKBONUS2 : GameObject;
var LOCKBONUS3 : GameObject;
var LOCKBONUS4 : GameObject;
var LOCKBONUS5 : GameObject;
var Crystal1 : GameObject;
var Crystal2 : GameObject;
var Crystal3 : GameObject;
var Crystal4 : GameObject;
var Crystal5 : GameObject;
var Crystal6 : GameObject;
var Crystal7 : GameObject;
var Crystal8 : GameObject;
var Crystal9 : GameObject;
var Crystal10 : GameObject;
var Crystal11 : GameObject;
var Crystal12 : GameObject;
var Crystal13 : GameObject;
var Crystal14 : GameObject;
var Crystal15 : GameObject;
var Crystal16 : GameObject;
var Crystal17 : GameObject;
var Crystal18 : GameObject;
var Crystal19 : GameObject;
var Crystal20 : GameObject;
var Ygem : GameObject;
var Rgem : GameObject;
var Pgem : GameObject;
var Ggem : GameObject;
var Bgem : GameObject;
//
var levelReached : int = 0;
levelReached = PlayerPrefs.GetInt("level1");
var levelReached2 : int = 0;
levelReached2 = PlayerPrefs.GetInt("level2");
var levelReached3 : int = 0;
levelReached3 = PlayerPrefs.GetInt("level3");
var yellowgem : int = 0;
yellowgem = PlayerPrefs.GetInt("yellowgem");
var levelReached4 : int = 0;
levelReached4 = PlayerPrefs.GetInt("level4");
var levelReached5 : int = 0;
levelReached5 = PlayerPrefs.GetInt("level5");
var levelReached6 : int = 0;
levelReached6 = PlayerPrefs.GetInt("level6");
var redgem : int = 0;
redgem = PlayerPrefs.GetInt("redgem");
var purplegem : int = 0;
purplegem = PlayerPrefs.GetInt("purplegem");
var greengem : int = 0;
greengem = PlayerPrefs.GetInt("greengem");
var bluegem : int = 0;
bluegem = PlayerPrefs.GetInt("bluegem");
var levelReached7 : int = 0;
levelReached7 = PlayerPrefs.GetInt("level8");
var levelReached8 : int = 0;
levelReached8 = PlayerPrefs.GetInt("level9");
var levelReached9 : int = 0;
levelReached9 = PlayerPrefs.GetInt("level9");
var levelReached10 : int = 0;
levelReached10 = PlayerPrefs.GetInt("level10");
var levelReached11 : int = 0;
levelReached11 = PlayerPrefs.GetInt("level11");
var levelReached12 : int = 0;
levelReached12 = PlayerPrefs.GetInt("level12");
var levelReached13 : int = 0;
levelReached13 = PlayerPrefs.GetInt("level13");
var levelReached14 : int = 0;
levelReached14 = PlayerPrefs.GetInt("level14");
var levelReached15 : int = 0;
levelReached15 = PlayerPrefs.GetInt("level15");
var levelReached16 : int = 0;
levelReached16 = PlayerPrefs.GetInt("level16");
var levelReached17 : int = 0;
levelReached17 = PlayerPrefs.GetInt("level17");
var levelReached18 : int = 0;
levelReached18 = PlayerPrefs.GetInt("level18");
var levelReached19 : int = 0;
levelReached19 = PlayerPrefs.GetInt("level19");
var levelReached20 : int = 0;
levelReached20 = PlayerPrefs.GetInt("level20");
//
function OnGUI()
{
//
if (levelReached == 2) {
                    Level2Gate.animation.Play("n2");
        Destroy (LOCK2);
         Crystal1.active = true;
                }
//
else if (levelReached == 0) {
        Crystal1.active = false;
    }

if (levelReached2 == 2) {
                    Level3Gate.animation.Play("n3");
        Destroy (LOCK3);
        Crystal2.active = true;
    }
  //
else if (levelReached2 == 0) {
        Crystal2.active = false;
    }

if (levelReached3 == 2) {
                    Level4Gate.animation.Play("n4");
        Destroy (LOCK4);
        Crystal3.active = true;
    }
  //
else if (levelReached3 == 0) {
        Crystal3.active = false;
    }
    //
    if (yellowgem == 2) {
         Destroy (LOCKBONUS1);
         Ygem.active = true;
    }
  //
else if (yellowgem == 0) {
       Ygem.active = false;
    }
      //
    if (levelReached4 == 2) {
                    Level5Gate.animation.Play("n5");
        Destroy (LOCK5);
         Crystal4.active = true;
    }
  //
else if (levelReached4 == 0) {
       Crystal4.active = false;
    }
      //
    if (levelReached5 == 2) {
                    Level6Gate.animation.Play("n6");
        Destroy (LOCK6);
         Crystal5.active = true;
    }
  //
else if (levelReached5 == 0) {
       Crystal5.active = false;
    }
      //
    if (levelReached6 == 2) {
                    Level7Gate.animation.Play("n7");
        Destroy (LOCK7);
         Crystal6.active = true;
    }
  //
else if (levelReached6 == 0) {
       Crystal6.active = false;
    }
     if (redgem == 2) {
         Destroy (LOCKBONUS4);
         Rgem.active = true;
    }
  //
else if (redgem == 0) {
       Rgem.active = false;
    }
              //
    if (levelReached7 == 2) {
                    Level8Gate.animation.Play("n8");
        Destroy (LOCK8);
         Crystal7.active = true;
    }
  //
else if (levelReached7 == 0) {
       Crystal7.active = false;
    }
              //
    if (levelReached8 == 2) {
                    Level9Gate.animation.Play("n9");
        Destroy (LOCK9);
         Crystal8.active = true;
    }
  //
else if (levelReached8 == 0) {
       Crystal8.active = false;
    }
              //
    if (levelReached9 == 2) {
                    Level10Gate.animation.Play("n10");
        Destroy (LOCK10);
         Crystal9.active = true;
    }
  //
else if (levelReached9 == 0) {
       Crystal9.active = false;
    }
               //
    if (levelReached10 == 2) {
                    Level11Gate.animation.Play("n11");
        Destroy (LOCK11);
         Crystal10.active = true;
    }
  //
else if (levelReached10 == 0) {
       Crystal10.active = false;
    }
               //
    if (levelReached11 == 2) {
                    Level12Gate.animation.Play("n12");
        Destroy (LOCK12);
         Crystal9.active = true;
    }
  //
else if (levelReached11 == 0) {
       Crystal11.active = false;
    }
     //
    if (levelReached12 == 2) {
                    Level13Gate.animation.Play("n13");
        Destroy (LOCK13);
         Crystal12.active = true;
    }
  //
else if (levelReached12 == 0) {
       Crystal12.active = false;
    }
      //
    if (levelReached13 == 2) {
                    Level14Gate.animation.Play("n14");
        Destroy (LOCK14);
         Crystal13.active = true;
    }
  //
else if (levelReached13 == 0) {
       Crystal13.active = false;
    }
          //
    if (levelReached14 == 2) {
                    Level15Gate.animation.Play("n15");
        Destroy (LOCK15);
         Crystal14.active = true;
    }
  //
else if (levelReached14 == 0) {
       Crystal14.active = false;
    }
            //
    if (levelReached15 == 2) {
                    Level16Gate.animation.Play("n16");
        Destroy (LOCK16);
         Crystal15.active = true;
    }
  //
else if (levelReached15 == 0) {
       Crystal15.active = false;
    }
               //
    if (levelReached16 == 2) {
                    Level17Gate.animation.Play("n17");
        Destroy (LOCK17);
         Crystal16.active = true;
    }
  //
else if (levelReached16 == 0) {
       Crystal16.active = false;
    }
              //
    if (levelReached17 == 2) {
                    Level18Gate.animation.Play("n18");
        Destroy (LOCK18);
         Crystal17.active = true;
    }
  //
else if (levelReached17 == 0) {
       Crystal17.active = false;
    }
                 //
    if (levelReached18 == 2) {
                    Level19Gate.animation.Play("n19");
        Destroy (LOCK19);
         Crystal18.active = true;
    }
  //
else if (levelReached18 == 0) {
       Crystal18.active = false;
    }
                 //
    if (levelReached19 == 2) {
                    Level20Gate.animation.Play("n20");
        Destroy (LOCK20);
         Crystal19.active = true;
    }
  //
else if (levelReached19 == 0) {
       Crystal19.active = false;
    }
               //
    if (levelReached20 == 2) {
         Destroy (LOCK21);
         Crystal20.active = true;
    }
  //
else if (levelReached20 == 0) {
       Crystal20.active = false;
    }
     //
    if (purplegem == 2) {
         Destroy (LOCKBONUS2);
         Pgem.active = true;
    }
  //
else if (purplegem == 0) {
       Ggem.active = false;
    }
        //
    if (greengem == 2) {
         Destroy (LOCKBONUS5);
         Ggem.active = true;
    }
  //
else if (greengem == 0) {
       Ggem.active = false;
    }
           //
    if (bluegem == 2) {
         Destroy (LOCKBONUS3);
         Bgem.active = true;
    }
  //
else if (bluegem == 0) {
       Bgem.active = false;
    }
}

Dude, this is really a complicated way to do stuff! There are several things that you could do to improve your code:

1- If the levels can only be reached in sequence, you could just save a variable like currentLevel to show in which level you are;

2- If levels can be randomly reached, you could have an array of booleans (instead of int), which tell if the level was reached;

3- Instead of checking all variables each OnGUI (or even each Update), you should have an independent function - let’s call it SetupLevels() - which you would call only when needed - each time you completed some level, for instance.

4- Use arrays instead of lots of variables.

Just as an example, in the script below I kept the PlayerPrefs the way they are, but added the SetupLevels() function and switched to arrays where possible. Maybe this script can’t replace yours directly, since some levels seem to have different actions associated, but hope it can show you a simpler way to do the thing:

var YellowUnlocked : Texture2D;
var level1Locked : Texture2D;

// fill these arrays in the Inspector:
var LevelGate: GameObject[];
var LOCK: GameObject[];
var Crystal: GameObject[];

var Ygem : GameObject;
var Rgem : GameObject;
var Pgem : GameObject;
var Ggem : GameObject;
var Bgem : GameObject;
var LOCKBONUS1: GameObject;
var LOCKBONUS2: GameObject;
var LOCKBONUS3: GameObject;
var LOCKBONUS4: GameObject;
var LOCKBONUS5: GameObject;
//
var numLevels = 20;
var levelReached: int[] = new int[numLevels+1];
var yellowgem: int;
var redgem: int;
var purplegem: int;
var greengem: int;
var bluegem: int;

function Start(){
  // set the default value to 0 when reading the prefs
  for (var i = 1; i <= numLevels; i++){
    levelReached *= PlayerPrefs.GetInt("level"+i.ToString(),0);*
 *}*
 *yellowgem = PlayerPrefs.GetInt("yellowgem",0);*
 *redgem = PlayerPrefs.GetInt("redgem",0);*
 *purplegem = PlayerPrefs.GetInt("purplegem",0);*
 *greengem = PlayerPrefs.GetInt("greengem",0);*
 *bluegem = PlayerPrefs.GetInt("bluegem",0);*
*}*
*// call this function when you want to update the levels:*
*function SetupLevels(){*
 *for (var j = 1; j < numLevels; j++){*
 *if (levelReached[j]==2){*
 *var n = j+1; // n = next level*
 *LevelGate[n].animation.Play("n"+n.ToString());*
 *if (LOCK[n]) Destroy(LOCK[n]);*
 *Crystal[n].active = true;*
 *} else {*
 *Crystal[n].active = false;*
 *}*
 *}*
 *if (yellowgem == 2) {*
 *Destroy (LOCKBONUS1);*
 *Ygem.active = true;*
 *}*
 *else if (yellowgem == 0) {*
 *Ygem.active = false;*
 *}*
 *if (redgem == 2) {*
 *Destroy (LOCKBONUS4);*
 *Rgem.active = true;*
 *}*
 *else if (redgem == 0) {*
 *Rgem.active = false;*
 *}*
 *if (purplegem == 2) {*
 *Destroy (LOCKBONUS2);*
 *Pgem.active = true;*
 *}*
 *else if (purplegem == 0) {*
 *Ggem.active = false;*
 *}*
 *if (greengem == 2) {*
 *Destroy (LOCKBONUS5);*
 *Ggem.active = true;*
 *}*
 *else if (greengem == 0) {*
 *Ggem.active = false;*
 *}*
 *if (bluegem == 2) {*
 *Destroy (LOCKBONUS3);*
 *Bgem.active = true;*
 *}*
 *else if (bluegem == 0) {*
 *Bgem.active = false;*
 *}*
*}*
*
*