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
}
}