- Home /
Shield effect is permanent and not temporary as intended. Have I made a boolean constant?
Ok this is probably going to be harder to explain than for you guys to help me solve, so bare with me...
At certain point throughout my game the player can pick up shields and those shields last approx 30 seconds. Once the shield is picked up the player becomes invulnerable for that 30 seconds after which the shield destroys itself and the player takes damage again.
(While the player has the shield it is a child object of the player)
My problem is that my script has made the player invulnerable even if they haven't picked up the shield. Its as though the player is always carrying/using the shield even when they don't have it.
script-
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 Transform shieldsUp;
public bool shieldActive = false;
void Update ()
{
shieldsUp = transform.Find("Shield");
if(shieldsUp != 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(shieldActive = true && other.tag == "Asteroid02")
{
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);
}
}
}
I'm guessing that I've made a variable constant, but I just don't see where my mistake is. Possibly even where I have made the script check if the shield object is currently a child object (as the mechanics of checking that are not 100% clear to me)
Any help here is greatly appreciated guys
:)
Answer by Bonfire-Boy · Mar 23, 2015 at 01:07 PM
You're setting the shieldActive to true regardless of whether or not there's a child named "Shield", with this line...
if(shieldActive = true && other.tag == "Asteroid02") { }
Turned this into an answer, as it's correct; when you use '=' ins$$anonymous$$d of '==', you're setting the value to true ins$$anonymous$$d of checking it.