Jump to content
Unity Insider Forum

Problem mit meinem Script


KiwiProd

Recommended Posts

Hallo, ich habe ein Problem mit meinem Script.

Unzwar möchte ich den SceneManager benutzen, um zu prüfen ob eine gewisse Scene gerade benutzt wird(also mit dem == Operator).

Allerdings weiß ich nicht was hier hinkommt(bei den .....)     if (SceneManager........ ==  0)

Ich würde mich über schnelle Hilfe freuen. Hier mein Script, Fehlerquelle ist in der Zeile 24 des Scripts (Die ganzen Anmerkungen können missachtet werden):

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine;


public class HealthController : MonoBehaviour {

    public float startHealth = 5;                     //Anfangslebensanzahl: 5
    public int startLifePoints = 3;                    //Anfangsanzahl an LifePoints
    private float health = 5;                         //Lebenszustand: 5
    private int lifePoints = 3;                     //Lebenspunkte: 3 (int, weil es eh nur Ganzzahlen sind)

    private Animator anim;                   //Referenz auf den Animator
    private PlayerController playerController;//Referenz auf den PlayerController
    private bool isDead = false;               //der Boolparameter isDead is deaktiviert(man ist nicht tot)
    private bool isDamageable = true;

    void Start () {
        anim = GetComponent<Animator>();                            //Referenz auf Animator einstellen
        playerController = GetComponent<PlayerController>();        //Referenz auf PlayerController einstellen

        //wenn es eine Begrüssungsscene gibt, muss das Level, in dem man die Startwerte bekommt, entsprechend angepasst werden
        if (SceneManager.)             //wenn man im Level 0 ist bekommt man die Startwerte zugewiesen
        {                                             //(das steht hier zwar nicht, aber) in den anderen Leveln bekommt man die Werte zugewisen, die man beim Beenden der letzten Scene hatte
            health = startHealth;                         
            lifePoints = startLifePoints;
        }

        health = PlayerPrefs.GetFloat("Health");           //gespeicherten Healthwert in der nächsten Scene wieder aufrufen
        lifePoints = PlayerPrefs.GetInt("LifePoints");     //gespeicherte LifePoints-Anzahl in der nächsten Scene wieder aufrufen
    }

    void ApplyDamage(float damage)                                  //floatwert (Schadenswert) wird übergeben
    {
        if (isDamageable)                               //wenn Damage erlaubt ist.....
        {

            health -= damage;                                           //Schaden wird von healthwert abgezogen

            health = Mathf.Max(0, health);                              //wenn health kleiner als 0 ist wird 0 gewählt, dass der Gesundheitswert nicht negativ werden kann

            if (!isDead)                                               //wenn man nicht(!) tot ist
            {
                if (health == 0)                                            //wenn die Lebensanzahl 0 ist soll die Dying Animation abgespielt werden
                {
                    isDead = true;
                    Dying();
                }
                else                                                        //ansonsten soll die Damageanimation abgespielt werden
                {
                    Damaging();
                }

                isDamageable = false;
                Invoke("ResetIsDamageable", 1);
            }
        }
    }

    void ResetIsDamageable()
    {
        isDamageable = true;
    }

    void Dying()
    {
        anim.SetBool("Dying", true);                     //bool, weil der Parameter der Dyingainamtion ein Boolparameter ist, false wird durch true ersetzt
        playerController.enabled = false;              //der PlayerController wird auf false gesetzt, dass man solange man tot ist man sich nicbt weiterbewegen kann

        lifePoints --;                                        //1 Lifepoint wired abgezogen
        
        if (lifePoints <= 0)                                  //wenn die Lifepoints kleiner als 0 sind.....
        {
            //StartGame                                       //soll das Spiel neugestartet werden
            Invoke("StartGame", 3);                           //Spiel nach 3 Sekunden neustarten
        }
        else
        {
            //RestartLevel                                    //andernfalls soll das Level neugestartet werden
            Invoke("RestartLevel", 1);                        //Level nach einer Sekunde neustarten
        }

    }

    void StartGame()
    {
        SceneManager.LoadScene(0);
    }

    void RestartLevel()
    {
        health = startHealth;             //Lebensanzahl wird auf Anfangslebensanzahl zurückgesetzt
        isDead = false;
        anim.SetBool("Dying", false);     //Boolparameter Dying wieder auf false setzen(um nicht mehr tot zu sein)
        playerController.enabled = true;  //den PlayerController wieder aktivieren, um sich wieder bewegen zu können

        if (!playerController.lookingRight)  //WICHTIG: ! bedeuted Verneinung
        {                                    //in dem Fall --> wenn der Spieler NICHT (!) nach rechts guckt....
            playerController.Flip();         //.... soll die Blickrichtung geflipt werden, sodass er nach rechts guckt
        }
        //Level neu generieren und Spieler zurücksetzen

    }

    void Damaging()
    {
        anim.SetTrigger("Damage");
    }

    private void OnDestroy()                            //wird aufgerufen wenn ein Script zerstört wird, was hier nur pasiert wenn eine Scene gewechselt wird
    {
        PlayerPrefs.SetFloat("Health", health);         //Healthwert wird (für nächste Scene) gespeichert
        PlayerPrefs.SetInt("Lifepoints", lifePoints);   //LifePoints-Anzahl wird (für nächste Scene) gespeichert
    }
}

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke du möchtest das hier. Es holt sich die aktuelle Szene von Manager und schaut ob der Szenenindex 0 ist:

  if (SceneManager.GetActiveScene().buildIndex == 0)             //wenn man im Level 0 ist bekommt man die Startwerte zugewiesen
        {                                             //(das steht hier zwar nicht, aber) in den anderen Leveln bekommt man die Werte zugewisen, die man beim Beenden der letzten Scene hatte
            health = startHealth;                         
            lifePoints = startLifePoints;
        }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...