Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by Gtren456 · Apr 01, 2017 at 02:52 AM · c#optimizationquick

Optimizing Code

Hi I have some code for my game that checks what level you are on and if you are a certain level it enables the interactable component for the buttons one by one each level. I am new to programming so i was wondering if someone could help me optimize my code as i have to individually check each level in the update function at the moment Here is my code

 public class LevelManager : MonoBehaviour {
     public Click click;
     public GameObject levelholder;
     public float bargain;
     public float researchpoints;
     public float researchskill;
     public float researchlevel;
     public UpgradeManager ugpr;
     public AudioSource audio1963;
     public Button research;
     public UnityEngine.UI.Text Rlevel;
     public float rcost;
     public float baseCost;
     public UnityEngine.UI.Text Rcost;
 
 public void Update()
     {
         Rlevel.text = "Research Level: " + researchlevel;
         Rcost.text = "Cost to research: " + rcost;
         PlayerPrefs.SetFloat("ResearchL", researchlevel);
         PlayerPrefs.SetFloat("Rcost2", rcost);
         if (researchlevel < 3f)
         {
             ugpr.item3.interactable = false;
             ugpr.item4.interactable = false;
             ugpr.item5.interactable = false;
             ugpr.item6.interactable = false;
             ugpr.item7.interactable = false;
             ugpr.item8.interactable = false;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
         }
          if(researchlevel == 4f)
         {
             ugpr.item3.interactable = true;
             ugpr.item4.interactable = false;
             ugpr.item5.interactable = false;
             ugpr.item6.interactable = false;
             ugpr.item7.interactable = false;
             ugpr.item8.interactable = false;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
         }
         if (researchlevel == 5f)
         {
             ugpr.item3.interactable = true;
             ugpr.item4.interactable = true;
             ugpr.item5.interactable = false;
             ugpr.item6.interactable = false;
             ugpr.item7.interactable = false;
             ugpr.item8.interactable = false;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
         }
         if (researchlevel == 6f)
         {
             ugpr.item3.interactable = true;
             ugpr.item4.interactable = true;
             ugpr.item5.interactable = true;
             ugpr.item6.interactable = false;
             ugpr.item7.interactable = false;
             ugpr.item8.interactable = false;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
         }
         if (researchlevel == 7f)
         {
             ugpr.item3.interactable = true;
             ugpr.item4.interactable = true;
             ugpr.item5.interactable = true;
             ugpr.item6.interactable = true;
             ugpr.item7.interactable = false;
             ugpr.item8.interactable = false;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
         }
         if (researchlevel == 8f)
         {
             ugpr.item3.interactable = true;
             ugpr.item4.interactable = true;
             ugpr.item5.interactable = true;
             ugpr.item6.interactable = true;
             ugpr.item7.interactable = true;
             ugpr.item8.interactable = false;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
         }
         if (researchlevel == 9f)
         {
             ugpr.item3.interactable = true;
             ugpr.item4.interactable = true;
             ugpr.item5.interactable = true;
             ugpr.item6.interactable = true;
             ugpr.item7.interactable = true;
             ugpr.item8.interactable = true;
             ugpr.item9.interactable = false;
             ugpr.item10.interactable = false;
 
             if (researchlevel == 10f)
             {
                 ugpr.item3.interactable = true;
                 ugpr.item4.interactable = true;
                 ugpr.item5.interactable = true;
                 ugpr.item6.interactable = true;
                 ugpr.item7.interactable = true;
                 ugpr.item8.interactable = true;
                 ugpr.item9.interactable = true;
                 ugpr.item10.interactable = false;
 
                 if (researchlevel > 10f)
                 {
                     ugpr.item3.interactable = true;
                     ugpr.item4.interactable = true;
                     ugpr.item5.interactable = true;
                     ugpr.item6.interactable = true;
                     ugpr.item7.interactable = true;
                     ugpr.item8.interactable = true;
                     ugpr.item9.interactable = true;
                     ugpr.item10.interactable = true;
 
                 }
 
             }
 
         }
 
 

So i was wondering is there a better way to disable all buttons except for 3 when on level 4 and all buttons except for 3 and 4 when on level 5 and so on without a huge block of long code

Comment
Add comment
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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by UnityCoach · Apr 01, 2017 at 11:30 AM

Ok, first, careful with the bracketing, the code you posted will never go into the last branches, Unity console may even give you an "unreachable code" warning, as if research level can't be 9 and 10 at the same time.

Anyway, You don't want to do this in Update, you want to do this when researchlevel changes only. You can use an accessor for this, like :

 private float _researchlevel;
 public float researchlevel
 {
     get { return _researchlevel; }
     set
     {
         if (_researchlevel != value) // if the value changed
         {
             _researchlevel = value; // update the variable
             ugpr.item3.interactable = _researchlevel != 4f; // give the conditions to each
             ugpr.item4.interactable = _researchlevel < 3f;
             ugpr.item5.interactable = _researchlevel > 4f;
             ugpr.item6.interactable = _researchlevel != 4f && _researchlevel < 7f;
             ugpr.item7.interactable = _researchlevel != 4f;
             ugpr.item8.interactable = _researchlevel == 4f;
             ugpr.item9.interactable = _researchlevel != 4f;
             ugpr.item10.interactable = _researchlevel != 4f;
         }
     }
 }

I can't see from your code what changes the researchlevel variable, but whatever did will trigger this mechanics, if you replace it with this accessor.

Comment
Add comment · Show 5 · 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
avatar image Gtren456 · Apr 02, 2017 at 12:31 AM 0
Share

Thanks for the answer I have implemented your code to the top of my script like so

 public class Research$$anonymous$$anager : $$anonymous$$onoBehaviour {
     public Click click;
     public Upgrade$$anonymous$$anager upg;
     public float rcost;
     public float rlevel;
     private float baseCost;
     public AudioSource audiowait;
     public AudioSource audiofunds;
     public Button researchbutton;
     private float rvalue;
     public UnityEngine.UI.Text leveltext;
     public UnityEngine.UI.Text buttoninfo;
     private float _rlevel;
 
     private float _researchlevel;
     public float researchlevel
     {
         get { return _researchlevel; }
         set
         {
             if (_researchlevel != researchlevel) // if the value changed
             {
                 _researchlevel = researchlevel; // update the variable
                 upg.item3.interactable = _researchlevel < 4f; // give the conditions to each
                 upg.item4.interactable = _researchlevel < 5f;
                 upg.item5.interactable = _researchlevel < 6f;
                 upg.item6.interactable = _researchlevel < 7f;
                 upg.item7.interactable = _researchlevel < 8f;
                 upg.item8.interactable = _researchlevel < 9f;
                 upg.item9.interactable = _researchlevel < 10f;
                 upg.item10.interactable = _researchlevel < 11f;
             }
         }
     

but when the research level is below 4 the button does not become uninteractable. I dont think in this code you are telling the buttons to be interactable = false when the _researchlevel is what the condition is. Please excuse me if i sound stupid as i am new to program$$anonymous$$g I will now explain what i want to do in more detail:

so what i want to do is i have a panel of 10 gameobjects all of which are buttons when you first start the game 2 of those buttons should allready be interactable 1 and 2 then when your research level goes up to level 4 the third button should also become interactable then at level 5 the fourth should become interactable until level 11 when all buttons are interactable by the way you click a button to research level +1 so i need it to detect all 11 levels and enable the buttons one at a time making one more button interactable each level

Thanks in advance for the answer.

avatar image UnityCoach Gtren456 · Apr 02, 2017 at 10:16 AM 0
Share

Well, you could make it very generic then, like :

 public List<Buttons> items; // put this in your upgrade manager to manage buttons as a list

Then, in the property, you can simply do this :

 private int _researchlevel;
 public int researchlevel // make this an int, it's easier to manage
 {
     get { return _researchlevel; }
     set
     {
         if (_researchlevel != researchlevel) // if the value changed
         {
             _researchlevel = researchlevel; // update the variable
             for (int i = 2 ; i < upgrade.items.count ; i++) // for all items, starting at the 3rd
                 upg.items[i].interactable = _researchlevel > i+2; // lists are zero based, so 1st item is at 0, 2nd item at 1, etc.
         }
     }
 }
avatar image Gtren456 UnityCoach · Apr 02, 2017 at 09:30 PM 0
Share

Sorry but I still don't understand how to make the button,Interactable = true or = false using your code. I need the 4-10 buttons to be interactable = false when < level 5 and when < level 6 it needs buttons 5-10 to be interactable = false so when you go up a level the next button is interactable = true. Thanks for all your help so far really appreciate it.

Show more comments
avatar image
0

Answer by Gtren456 · Apr 03, 2017 at 08:12 AM

@UnityCoach what code would I type to assign false to the left hand side of the operator, I have looked up some c# basics and tried some code but nothing works could you give me the line of code that will return 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

332 People are following this question.

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

Related Questions

Count colored pixels of RenderTexture and get this data on CPU. 0 Answers

Optimize mobile game with lot of Rigidbodies (Collisions) 0 Answers

Upcast vs GetComponent 1 Answer

Brainstorming Optimization 0 Answers

Less code for same thing 1 Answer


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