Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by hog12 · Mar 18, 2012 at 12:02 PM · fpsoptimize

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; } }

Comment
Add comment · Show 9
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image FLASHDENMARK · Mar 18, 2012 at 12:51 PM 0
Share

First of all why are you using OnGUI? You are never calling GUI functions so that is really redundant. Plus OnGUI updates at least 3 times more often than Update so checking if a condition is true would be 3 times more costly.

Secondly there is a lot of variables and checking going on in this script. I would recommend you looking into arrays(Google them). They are really easy to work with once you get to know them and they will give you a much bigger overview.

avatar image Eric5h5 · Mar 18, 2012 at 12:52 PM 0
Share

I'm sorry, but this script is insane. ;) (Also, you didn't bother to format it.) Why are you using 50 million separate variables when you can just use arrays and make your code literally 100X shorter and simpler?

avatar image Kleptomaniac · Mar 18, 2012 at 01:38 PM 0
Share

Oh ... my ... god ... No wonder your fps is non-existent ... That script is literally having to iterate through 96 variables at any one time ...

Arrays and in some case enums would be much much much recommended here. $$anonymous$$ake sure to use Built-in Arrays though.

Wow.

avatar image Eric5h5 · Mar 18, 2012 at 01:48 PM 1
Share

You mean "not use Javascript arrays".

avatar image Kleptomaniac · Mar 18, 2012 at 01:53 PM 0
Share

Oh dear, I can feel a wave of embarrassment co$$anonymous$$g on ... no, I did actually mean 'to use' ... why not? From what I can see in his code, there does't seem to be any need for dynamic arrays, so why waste performance in doing so?

Haha, try to go easy on me Eric, I am but a lowly noob. :D

Show more comments

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by aldonaletto · Mar 18, 2012 at 04:05 PM

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 ]

// 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; } }

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

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

Answers Answers and Comments

7 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Character Respawn 1 Answer

FPS RIGIDBODY PROBLEM 1 Answer

How to sprint and have a stamina bar? 0 Answers

Question about FPS Player Script 1 Answer

Where is the FPSPlayer Script? 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges