Jump to content
Unity Insider Forum

PlayerLeben in Scenen übertragen


iMarc

Recommended Posts

Hallo,

ich bin gerade dabei, mein 2D JumpnRun fertig zu stellen und möchte nun, dass die Leben meines Spielers in die anderen Level übertragen werden. Also wenn ich in Level 1 ein leben verliere, das Leben auch in Level 2 abgezogen wird.

 

Jetzt habe ich aber ein Problem. Ich habe einen Startscreen, der nach einem Timer zum nächsten Level führt. Da wollte ich die Information mit den Leben hinzufügen.

 

Da ich es nicht anders konnte, musste ich den Timer in Javascript machen, habe aber alles andere in c# gemacht. Nun sieht es wie folgt aus:

 

Mein TimerScript, mit den PlayerLeben: (javascript)

 

#pragma strict
var timer : float = 10.0;
var loadLevel : String;
var playerLives = 10.0;

function Update()
{
timer -= Time.deltaTime;
if(timer <= 0)
{
Application.LoadLevel(loadLevel);
PlayerPrefs.SetInt ("Lives", playerLives);
}
}

 

Und hier den Manager für die Leben des Players, der gesagt bekommen soll, dass die Leben des Players, den "Lives" aus dem Javascript entsprechen sollen: (c#)

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class HealthManager : MonoBehaviour {
//public int maxPlayerHealth;
public static int PlayerHealth;

Text text;
private LevelManager levelManager;
public bool isDead;
// Use this for initialization
void Start () {
 text = GetComponent<Text> ();
 //PlayerHealth = maxPlayerHealth;
 levelManager = FindObjectOfType<LevelManager> ();
 isDead = false;
}

// Update is called once per frame
void Update () {
 if(PlayerHealth <= 0 && !isDead) {
  PlayerHealth = 0;
  levelManager.RespawnPlayer ();
  isDead = true;
 }
 text.text = "" + PlayerHealth;
}
public static void HurtPlayer(int damageToGive)
{
 PlayerHealth -= damageToGive;
 PlayerPrefs.SetInt ("Lives", PlayerHealth);
}
public static void AddHealth (int healthToAdd)
{
 PlayerHealth += healthToAdd;
 PlayerPrefs.SetInt ("Lives", PlayerHealth);
}

//public void FullHealth()
//{
 //PlayerHealth = maxPlayerHealth;
//}
}

 

Leider stehen die Leven nun immer auf 0 und sterben tut der Player auch nicht mehr. (Außer einmal am Anfang).

 

Weiß jemand wo das Problem liegt oder ob es eine bessere Möglichkeit gibt?

Da ich mich noch nicht so gut auskenne (vorallem in Javascript) gehe ich davon aus, dass ich irgendwo was verwechselt oder vergessen habe ;).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Heyhey iMarc,

 

mir fallen jetzt zwei Sachen auf.

 

1. In der Javascript Datei, überschreibst du immer die Speicherung von "PlayerLives" mit 10.0. Also müsste der Spieler nach einem Level immer volles Leben haben.

 

2. Du lädst in der C# Datei das Leben vom Spieler nicht mehr. Also wird der Wert standartmäßig auf 0 gesetzt.

 

Ich mache das immer so, dass ich eine Klasse habe, die ich einfach Param (für Parameter) nenne. Da stehen dann immer solche Sachen drinnen, die über mehrer Level hinweg gültig sein sollen. Das ganze als static Variable und schon kann ich immer darauf zugreifen.

 

Wenn du es so machen willst, wie du jetzt hast. Also mit "PlayerPrefs". Dann musst du in der Javascript Datei das garnicht speichern, weil diese Speicherung immer gilt. Auch wenn du das Spiel beendest und am nächsten Tag neustartest, bleiben diese Speicherungen erhalten. Du musst nur in der Start vom "HealthManager" reinschreiben "PlayerHealth = PlayerPrefs.GetInt("Lives")". Damit läd er am Anfang den gespeicherten Wert und arbeitet mit dem weiter.

Du musst aber aufpassen, weil, wie gesagt, nach einem Neustart von Unity oder dem Spiel zählt der Wert auch noch. Also musst immer schauen, ob der Spieler neustarten will oder das gespeicherte Laden will.

 

Gruß Ghost

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