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 Digital-Phantom · Mar 23, 2015 at 02:06 PM · inspectorparentbooleanchild objectgame object

Shields 'always' inactive. Player object doesn't recognise if child exists(Solved)

Sigh, you just know when you're having a bad day right....lol

Now I have pretty much the complete opposite problem to a question I posted earlier. Even if my player object picks up the shield object it still gets destroyed.

How things should happen....

The player object collects a shield, the shield becomes a child of the parent object for 30 seconds. During that time Boolean shieldActive = true and the player takes no damage. After 30 seconds the shield object self destroys and things go back to normal.

During play I can see in the hierarchy that the shield does become a child of the player but in the inspector shieldActive always shows false ?

 using UnityEngine;
 using System.Collections;
 
 
 public class ShipController : MonoBehaviour
 {
     public GameObject playerExplosion;
     public GameObject asteroidExplosion;
 
     public float speed;
     public float forwardSpeed;
 
     public GameObject shot;
     public Transform shotSpawn;
     public float fireRate;
     
     private float nextFire;
 
     public bool shieldActive = false;
 
     void Update ()
     {
         if(transform.FindChild("Shield") != null)
         {
             shieldActive = true;
         }
 
         if (Input.GetButton("Fire1") && Time.time > nextFire) 
         {
             nextFire = Time.time + fireRate;
             Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
             GetComponent<AudioSource>().Play ();
         }
     }
     
     void FixedUpdate ()
     {
         float moveHorizontal = Input.GetAxis ("Horizontal");
         Vector3 movement = new Vector3 (moveHorizontal, 0.0f, forwardSpeed);
         GetComponent<Rigidbody>().velocity = movement * speed;
         
     }
 
     void OnTriggerEnter (Collider other) 
     {
         if(other.tag == "Asteroid02" && shieldActive == true)
         {
             Instantiate(asteroidExplosion, other.transform.position, other.transform.rotation);
             Destroy(other.gameObject);
         }
 
         else
 
         if (other.tag == "Asteroid02")
         {
             Instantiate(asteroidExplosion, other.transform.position, other.transform.rotation);
             Instantiate(playerExplosion, transform.position, transform.rotation);
             Destroy(other.gameObject);
             Destroy(gameObject);
         }
     }
 }
 
 

If I manually check/un-check shieldActive in the inspector during runtime then everything works fine (player does or does not take damage depending if shieldActive is true/false)

So... any ideas what it is I've done wrong ??? (as usual any help is much appreciated)

:)

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

Answer by Landern · Mar 23, 2015 at 02:25 PM

FindChild is now undocumented, consequentially removed from the documentation(i know obvious).

Try using transform.Find. If you know the path in the game object, then you can navigate the hierarchy that way to find it quickly. Also ensure the naming is correct when instantiated and parented to the player game object and doesn't contain a "01" or something similar.

Comment
Add comment · Show 3 · 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 Digital-Phantom · Mar 23, 2015 at 02:36 PM 0
Share

ok changed transform.FindChild to transform.Find and that unfortunately didn't fix it.

Regarding the na$$anonymous$$g, once the player picks up the shield it shows in the hierarchy as Shield(clone). Do I have to tell it to Find "Shield" or "Shield(clone)" ???

avatar image Digital-Phantom · Mar 23, 2015 at 02:54 PM 2
Share

ok the correct line should read -

 if(transform.Find("Shield(Clone)") != null)

Can't believe it was so simple as adding the (clone) suffix.

Thanks @Landern

avatar image Digital-Phantom · Mar 23, 2015 at 03:00 PM 1
Share

I'll paste in the correct code for anybody having similar issues so it might help them too -

 void Update ()
     {
         if(transform.Find("Shield(Clone)") != null) //Check to see if child object with name "insert name" is present
         {
             shieldActive = true; // if present shieldActive / boolean = true
         }
         else
         {
             shieldActive = false; // if not present shieldActive / boolean = false
         }
 }
 

As I eventually found out thanks to @Landern, your na$$anonymous$$g has to be exact. Even something like adding the (Clone) suffix. So just be sure to write the exact words used in the hierarchy (spelling and capitalisation) to be sure.

:)

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

21 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

Related Questions

Shield effect is permanent and not temporary as intended. Have I made a boolean constant? 1 Answer

moving child objects in hierarchy and keep stacks/sorting? Help needed 0 Answers

Help needed on c# code which all of you will find basic apart from me 1 Answer

How to make a Boolean unchangeable 3 Answers

Set child position and move parents with 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