Hier ist das Skript zur Spielergesundheit ... Es legt die Gesundheit der Spieler in Unity fest und überträgt sie auf die GUI.

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

public class PlayerHealth : MonoBehaviour
{


    public Text hpText; //HP Value Text Element.
    public int PlayerHP; // Make it a property so you can alter its value in the editor

    void Start()
    {
        SetHPText ();
    }

    void Update ()
    {
        SetHPText ();
    }

    void SetHPText ()
    {
        hpText.text = "Health: " + PlayerHP.ToString();
    }
}

Dann nimmt dieser die aktuellen Gesundheitszustände des Spielers (und hält sie auf dem neuesten Stand). Wenn die Gesundheit des Spielers 0 (oder niedriger) ist, lädt sie eine neue Szene. Das Problem ist, dass die Tag-Tag-Prüfung für den Player und das Anwenden von Schäden nicht funktionieren.

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

public class DamageAuroa : MonoBehaviour {

    public int PHP; //PHP = Player Health from PlayerHealth.cs script.
    public int Damage; //Amount of damage.
    public string Level;

    void Update()
    {
        PHP = GameObject.Find("Player").GetComponent<PlayerHealth>().PlayerHP;
    }

    void OnTriggerEnter(Collider coll)
    {
        if (coll.gameObject.tag == "Player")
            PHP = PHP - Damage;

        if (coll.gameObject.tag == "Ball")
        {
            gameObject.SetActive(false);
            SceneManager.LoadScene(Level);
        }

        if (PHP <= 0)
            SceneManager.LoadScene(Level);

    }

}

Der seltsamste Teil von ALLES funktionierte, bevor ich Unity aktualisierte (ich kenne den Fehler eines Neulings). Hat jemand gesehen, was los ist? Bevor jemand nach Ja fragt, werden die Trigger und Tags richtig eingerichtet. Außerdem muss ich den aktualisierten HP-Wert an das Player-Integritätsskript übergeben, damit er auf der GUI aktualisiert werden kann. Ich versuche nur, diese Trigger zum Laufen zu bringen.

0
ElectricBoogaloo Pt. 2 2 Jän. 2016 im 01:44

2 Antworten

Beste Antwort

Der folgende Code funktioniert nicht, weil Sie eine neue Variable PHP erstellen, die der HP des Spielers entspricht (aber nicht darauf verweist, weil int ein Werttyp ist, kein Referenztyp) und wenn Sie Ändern Sie PHP. Es wird nur diese Variable geändert, nicht PlayerHP aus dem PlayerHealth Skript.

    void Update()
    {
        PHP = GameObject.Find("Player").GetComponent<PlayerHealth>().PlayerHP;
    }

    void OnTriggerEnter(Collider coll)
    {
        if (coll.gameObject.tag == "Player")
            PHP = PHP - Damage;

        ....

    }

Wenn Sie PlayerHealth ändern möchten, sollten Sie es direkt von der PlayerHealth Skriptinstanz aus ändern.

if (coll.gameObject.tag == "Player")
                GameObject.Find("Player").GetComponent<PlayerHealth>().PlayerHP= PHP - Damage;

Sie können auch Referenzvariablen erstellen, die auf das Skript PlayerHealth verweisen.

public class DamageAuroa : MonoBehaviour {

     PlayerHealth player;

     void Start () 
     {
        player = GameObject.Find("Player").GetComponent<PlayerHealth>();
     } 
   ...

Und dann benutze dieses Objekt, um die HP der Spieler einzustellen.

if (coll.gameObject.tag == "Player")
   player.PlayerHP = player.PlayerHP- Damage;
1
Valentin 1 Jän. 2016 im 22:52

Ja, ich bin mir nicht sicher, ob dies funktionieren wird, da ich selbst nicht so fortgeschritten bin, aber versuchen Sie es mit coll.tag, da die Collier-Klasse selbst eine Tag-Variable hat.

0
agubuzoboy 1 Jän. 2016 im 22:57