- Home /
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)
:)
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.
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)" ???
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
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
Follow this Question
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