• 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 xxluky · Oct 14, 2015 at 02:31 PM · collisionchild object

child collision detection

Is it even possible to check if a child gameobject of a parent object collided with lets say a terrain with tag "Terrain"?

I need to have the script on the parent object and just check if a child gameobject hit something.

Comment
Add comment · Show 1
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 xxluky · Oct 14, 2015 at 02:56 PM 0
Share

I would do something like:

 public GameObject childObject;
 
 void OnCollisionEnter2D(Collision2D coll)
 {
          if(coll.childObject.tag = "Terrain")
                // Do something
 }

but it is not working...

1 Reply

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

Answer by graciasluigi · Oct 14, 2015 at 03:53 PM

I think you need to do it in the other way around, You have a script attached to the child object, with the function OnCollisionEnter2D. And when this get triggered, your child object must "tell" the parent(its script) that a collision occurred.


=> Great, good idea but what if I have 10 child objects and what if I need each of them to react differently when they colide? So then I have to have 10 scripts. I would like to have one bigger script on the parent and control collision of child objects from the only one script on the parent. There must be a solution of this...

You could use the same script for all 10 child objects. The way a child object would tell the parent object, would be something like this: parentReference.CollisionHappened(this);
So, the child object is passing itself as an argument. Could pass also an enum value, or any specific configuration set by inspector in the child objects(all using the same script).

Comment
Add comment · Show 4 · 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 xxluky · Oct 14, 2015 at 03:20 PM 0
Share

Great, good idea but what if I have 10 child objects and what if I need each of them to react differently when they colide? So then I have to have 10 scripts. I would like to have one bigger script on the parent and control collision of child objects from the only one script on the parent. There must be a solution of this...

avatar image graciasluigi · Oct 14, 2015 at 03:51 PM 0
Share

I updated the answer. :)

avatar image xxluky · Oct 14, 2015 at 04:50 PM 0
Share

Ok, untill now I came up with this, but it is not working because of the condition in a parent script:

ChildScript:

     private PlaneScript planeScript;
 
     void Start()
     {
         planeScript = GameObject.Find("Plane").GetComponent<PlaneScript> ();
     }
     
     void OnCollisionEnter2D (Collision2D other)
     {
         if(other.gameObject.tag == "Terrain")
         {
             planeScript.CollisionHappend(this);
         }
     }

Parent script:

 public void CollisionHappend(ChildComponents child)
 {
     //if (child == "Propeller")
         print ("Propeller hit ground." + child);
 }

But there is an error: Operator ==' cannot be applied to operands of type ChildComponents' and `string'

The print of a child is "Propeller (ChildComponents)" - I am a beginner, please help me :-/

avatar image xxluky · Oct 14, 2015 at 06:08 PM 1
Share

I got it. The condition of ParentScript shoud be

if (child.name == "Propeller")

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

34 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

Related Questions

Moving children objects with parent 1 Answer

Snap with collision trigger on child objectss 1 Answer

How can I get Compound Colliders to work properly? 2 Answers

Collision Won't Work 0 Answers

Handling collision in child object 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