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 sparkzbarca · Nov 16, 2012 at 04:28 AM · optimizationprogramminggetcomponentefficiency

splitting a script up into multiple scripts...

So GetComponent, is it that intensive.

I like to have Different functions and stuff all there own script so that whatever i'm looking for I click the script and im right there, I'm worried though that basically having 30 scripts on an object when really there all working in concert will mess with performance as I GetComponent across scripts.

My camera for example has quite alot of scripts on it. Some of them are basically one script thats used only for another script.

I might have a Select & Move script but I have 2 different move scripts and it calls a different one depending on the movement for example. The scripts basically exist only to be called inside select and move, and technically I could just insert the code itself into select and move but I like abstracting it and being able to just call a function and when I want to mess with that function I go to that script.

Is this a bad idea? I learned C++ and it didnt matter because all the code compiled at run time into basically one super script, but having to reference other scripts with GetComponent calls and thereby access them at runtime seems like I might be slowing down the program.

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

1 Reply

· Add your reply
  • Sort: 
avatar image
3
Best Answer

Answer by Seth-Bergman · Nov 16, 2012 at 06:22 AM

well, calling GetComponent over a large variety of components throughout the scene COULD be performance intensive... Particularly if you are doing it EVERY FRAME.. i.e.:

 void Update(){
 SomeScript someComponent = GetComponent<SomeScript>();
 someComponent.DoSomething();
 }

SO, if you are accessing these objects FREQUENTLY, you should just run GetComponent ONCE, like say in the Start():

 public SomeScript someComponent;

 void Start(){
 someComponent = GetComponent<SomeScript>();
 }

 void Update(){
 someComponent.DoSomething();
 }

It is perfectly acceptable (IMHO) to use references to other components in this way.. (In fact it probably makes your code more legible) But GetComponent should basically only be used whenever you need to INITIALIZE your references (usually at the start, or when the object is created). Just keep that in mind, and you should be fine!

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

10 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

Related Questions

Multiple Cars not working 1 Answer

Is this code inefficient? It is causing Lag. 1 Answer

Are .transform .gameObject .rigidbody component calls or just pointers? 3 Answers

Accessing mesh vertices is extremely inefficient; any workarounds? 0 Answers

does using get component slow down game a lot? 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