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)

:slight_smile:

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.