Checking a gameObject active in hierarchy not working.
Hi guys, I currently have a script called "Player_Controller" which is attached to a player. And then I have this segment of code;
void Update () {
if (gameObject.activeSelf == false) {
Application.LoadLevel("game_over");
}
}
void OnTriggerEnter2D(Collider2D other) {
if (other.CompareTag ("enemy") == true) {
life -= 100;
health_bar.value = life;
Destroy(other.gameObject, 0.8f);
if (life <= 0) {
audio.PlayOneShot(ExplosionSFX);
Instantiate(explosionPrefab , transform.position, Quaternion.identity);
Destroy(gameObject, 1.5f);
}
}
}
Basically, what I'm trying to do is when my player dies and the player object gets destroyed, it will load the "game_over" scene. As you can see from here, I have that segment under the Update function but it does not get called at all. I had also included a debug log right below the Application.LoadLevel and it doesn't show.
@Pengocat is right.
When the GameObject is destroyed, it nullifies my Update(). I can confirm this by using "GetComponent" in another script and it shows me the error.
It was silly of me to fail to notice this basic step. Big thanks to you bro! (:
This is the code I am using now;
public void OnDestroy() {
if (gameObject.activeSelf == false) {
Application.LoadLevel("game_over");
Debug.Log ("change scene!");
}
}
You are welcome! The if statement is redundant. For good measure Application.LoadLevel is deprecated so you should use Scene$$anonymous$$anagement ins$$anonymous$$d like this.
using UnityEngine;
using UnityEngine.Scene$$anonymous$$anagement;
public class Player_Controller : $$anonymous$$onoBehaviour
{
void OnDestroy()
{
Scene$$anonymous$$anager.LoadScene("game_over");
}
}
Answer by Pengocat · Dec 16, 2016 at 05:36 PM
If you destroy the GameObject that contains this script then update is no longer called. Try using void OnDisable() or OnDestroy() instead of Update() if this is what you want.
Hi, I've edited my code to the following;
if (gameObject.activeInHierarchy == false) {
Application.LoadLevel("game_over");
Debug.Log ("change scene!");
}
It still does not work.
Sorry I changed my answer after giving it a second look.
That's fine bro. However it still does not work. Not even the Debug.Log. I wonder what's going on.
void onDisable() {
if (gameObject.activeSelf == false) {
Application.LoadLevel("game_over");
Debug.Log ("change scene!");
}
}
Your answer
Follow this Question
Related Questions
SetActive not working as should 0 Answers
Preventing name duplication in Hierarchy(getting selected GameObject) 1 Answer
Problem with ActiveInHierarchy checking if other gameobject is active. 1 Answer
Deactivating/Activating Gameobjects is inconsistent 0 Answers
I have prefabs that should be referencing different GameObjects, but they all refer to the same one. 0 Answers