• 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 Ferofax · Jun 22, 2016 at 01:42 PM · child object

Changing sprite of child object changes the parent object's sprite instead

So I am setting up an inventory system and I have slots which hold objects. However, whenever I use the following code, the image of the parent(slot) changes to the desired sprite instead of the image of the child(item):

GetComponentInChildren().sprite = itemHeld.Sprite;

Any ideas on what I might be doing wrong?

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
1
Best Answer

Answer by gorsefan · Jun 22, 2016 at 02:29 PM

Without more detail as to the hierarchy & code we can only guess, but assuming you want to change the first child, try executing this code in the script on the parent;

 this.gameObject.transform.GetChild(0).GetComponent().sprite = itemHeld.Sprite;

or

 this.gameObject.transform.GetChild(0).GetComponentInChildren().sprite = itemHeld.Sprite;

That's untested as i dont know unityscript or your scene. But hopefully you get the idea ;)

Comment
Add comment · Show 2 · 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 Ferofax · Jun 22, 2016 at 05:09 PM 0
Share

Yeah this is what I ultimately ended up using: transform.GetChild(0).GetComponent().sprite = itemHeld.Sprite;

To be honest I still don't quite understand why my first example didn't work(just seems a bit strange), though I imagine if I have a similar problem in the future your solution's are likely what I'm going to first throw at it. Thank you guys for solving my headache! Wish I could give you both best answer!

avatar image _dns_ Ferofax · Jun 22, 2016 at 05:28 PM 1
Share

Cool it works. I'm pretty sure your first code didn't work because getComponentInChildren returned the component from the gameObject itself and not one of it's child (getComponentInChildernS() would have returned both). You can make sure of this Debug.Loging GetComponentInChildren().GetInstanceID() and checking if the number you get is the same displayed in the gameobject's inspector (you have to enable debug mode first in the inspector by right clicking in the "inspector" tab/text of the inspector window and selecting "debug"). Just coz getting to the end of things usually means better learning ;-)

avatar image
1

Answer by _dns_ · Jun 22, 2016 at 02:28 PM

Hi, GetComponentInChildren() returns the component of the GameObject itself too (see documentation).

I guess it returns the one from the GameObject before the one from the child objects (and it won't return the one from inactive child gameobjects). This could explain why your code changes the one from the parent object and not the child.

To access the child item's component: you can use transform.GetChild( childIndexNumber ).GetComponent()

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.

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Activate child only problem 2 Answers

OnCollisionEnter2D not detecting the right object 1 Answer

How to glue objects together and still getting individual collision detection? 1 Answer

Modifying HingJoint2D in a child GameObject 0 Answers

How Should I Get a List of Child Objects 2 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