• 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 OtreX · Apr 02, 2015 at 07:14 AM · getcomponent

Help with gameobject.getcomponent of parent

Hi guys. I have a problem here.

I have a gameObject Child that is a child of a bigger gameObject Parent. Use those as the names. Parent has a variable called MoveSpeed that changes ingame.

There is a script on the Child that goes like this:

     public GameObject Parent = null;
     public float Speed = 0.0f;
 
     void Start () 
     {
         Parent = gameObject.transform.root.gameObject;    
     }
     
     void Update () 
     {
         Speed = Parent.GetComponent<Pilot> ().MoveSpeed;
     }
 }

If I comment out the line inside the Start() function and assign the Parent in the inspector, the variable updates normally. But when I try to use any line like:

 Parent = gameObject.transform.root.gameObject;    
 
 or
 
 Parent = gameObject.transform.parent.gameObject;    

The variable Speed = MoveSpeed at Start(), BUT the Speed variable doesnt updates even when the MoveSpeed is changing.

Can anybody explain me why does this happens and how to properly access a variable of a parent or root gameObject and make it update?

Thank you!

Comment
Add comment · Show 3
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 sumeeton · Apr 02, 2015 at 07:46 AM 0
Share

The script works fine! I've tested it. $$anonymous$$ake sure the Pilot script is attached to the parent gameobject and make sure it is the root most parent gameobject in the hierarchy.

avatar image trololo · Apr 02, 2015 at 08:12 AM 0
Share

And a properly way to do that would be:

 private Pilot Parent;
 private float Speed;
 
 void Awake()
 {
     Parent = null;
     Speed = 0.0f;
 }
 
 void Start () 
 {
     Parent = gameObject.GetComponentsInParent<Pilot>();  
 }
 
 void Update () 
 {
     Speed = Parent.$$anonymous$$oveSpeed; // never do a GetComponent in an update function
 }

avatar image Nymisu · Apr 07, 2015 at 09:23 AM 0
Share

As the person above said, never ever ever do getcomponent in update, unless it's practically a one-off case. It's incredibly expensive, because it has to go searching for the component every single frame.

0 Replies

· Add your reply
  • Sort: 

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Accessing other objects efficiently 1 Answer

Destroy(GetComponent(...)) not working 1 Answer

GetComponent(); in Awake cant be accessed in Update 1 Answer

BCW0012: WARNING: 'UnityEngine.MeshCollider.mesh' is obsolete. mesh has been replaced with sharedMesh and will be deprecated 1 Answer

Problem getting information out of colliding objects 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