Jump to content
Unity Insider Forum

SetActive (true/false) - Doch nichts passiert


Blissm

Recommended Posts

Hehoo, ich hätt' da jetzt auch mal eine Frage....

Ich hab vor bei Mega Bliss Bros. eine Funktion einzubauen die bewirkt dass man, wenn man 25 oder mehr Leben gesammelt hat, man den Unbesiegbarkeits-Modus aktiviert. Das heißt alle Gegner gegen die man dann läuft sterben einfach, ohne den Spieler auch nur zu kratzen. Lediglich das Herunterfallen kann einen dann noch Leben kosten, und somit den Modus wieder deaktivieren. 

Das mit dem Meucheln klappt soweit auch schon gut, nur hab ich Probleme damit den Modus ein- und auszustellen.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {

	public static GameManager gm;

	// (...)

	// game performance
	public int score = 0;
	public int highscore = 0;
	public int startLives = 3;
	public int lives = 25;

    // (...)

    // private variables
    GameObject _player;
    Vector3 _spawnLocation;
    Scene _scene;
    GameObject _Invincible;

	// (...)

	// setup all the variables, the UI, and provide errors if things not setup properly.
	void setupDefaults() {
		
    // (...)

        // Wieso findet es das nicht ??? o-Ô
        _Invincible = GameObject.FindGameObjectWithTag("Invincibility");

    // (...)
                            
    public void SetActive()
    {
        if (lives>=25)

        {
            _Invincible.SetActive(true);
            
        }
        if (lives<=24)
        {
            _Invincible.SetActive(false);
        }
    }
}

Es passiert einfach garnichts. Wenn "Invincibility" bereits aktiv ist bleibt es das auch, und ich kann die Gegner töten. Aber es deaktiviert sich nicht wenn ich Herzen verliere. Und eigentlich soll es ja auch so sein dass es zu Beginn bereits deaktiviert ist, und sich erst aktiviert sobald man genug Leben ergattert hat. Aber das klappt genauso wenig.

"Invincibility" ist ein Child von Sparty (der Spielfigur). Ist es aktiviert bekommt Sparty pulsierende Herzchen-Augen und einen Circle-Collider, der alle Gegner um ihn herum ausmerzt.

HeartySparty.PNG.bfa90d5738ba75f3c2f6d6bb7e89d30f.PNGHeartySparty2.PNG.080eb15a95c4982b7c758da4eed899d4.PNGSpartyHearty.PNG.304e0e8b94d7df0db83c9b0521938841.PNGSpartyHearty2.PNG.c32604474b0a2f5d80fa70b46a2c2cc0.PNGSpartyHearty3.PNG.1198b8cecb4e75206a401df65d5c5244.PNG

Hoffe euch fällt was dazu ein. Hab bislang nichts finden können was mir da irgendwie weiter hilft.... 😅😬

Link zu diesem Kommentar
Auf anderen Seiten teilen

In deinem Codeausschnitt kann man leider nicht erkennen, wann du nach dem Objekt suchst. Wird die entsprechende Methode überhaupt aufgerufen?
Hat denn dein Gameobject überhaupt den Tag mit besagtem Namen?
Wenn das Objekt nicht gefunden wurde, bleibt die Variable null und du solltest eigentlich eine Fehlermeldung sehen, sobald du versuchst auf die Referenz zuzugreifen, denn es gibt ja keine Referenz.

Du solltest deine Methode nicht SetActive nennen. Gib ihr einen eindeutigen Namen, der klar macht, dass es einen Methode/Funktion von dir ist und nicht von Unity. Das kann problematisch sein oder wenigstens zu Verwechselungen führen.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab's geschafft..! 😍

Ich musste es jetzt nur noch nach void Update verschieben. Manchmal kommt man auf die einfachsten Dinge nicht... 🤦‍♂️

Danke für die schnelle Antwort! Ja, da war ne Fehlermeldung, aber die war irgendwie uneindeutig. 🤔 Und naja, ein paar Mal hatte ich es auch versucht anders zu nennen, aber dann wurde mir alles mit .setActive rot unterstrichen, deshalb dachte ich es geht nicht anders. Aber ja, wieso nicht einfach dorthin schieben wo es eh schon ein void gibt~

// game loop
	void Update() {
		// if ESC pressed then pause the game
		if (Input.GetKeyDown(KeyCode.Escape)) {
			if (Time.timeScale > 0f) {
				UIGamePaused.SetActive(true); // this brings up the pause UI
				Time.timeScale = 0f; // this pauses the game action
			} else {
				Time.timeScale = 1f; // this unpauses the game action (ie. back to normal)
				UIGamePaused.SetActive(false); // remove the pause UI
			}
		}

        if (lives >= 26)

        {
            _Invincible.SetActive(true);

        }

        if (lives <= 25)
        {
            _Invincible.SetActive(false);
        }
    }

HeartySkullA.PNG.4059ea3700b45b84c42a78811ab8138e.PNGHeartySkullB.PNG.7a71cabb21439e785ab6518f75071097.PNG💜💚

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...