Jump to content
Unity Insider Forum

Bug? Healthbar synchronisieren


MustafGames

Recommended Posts

Hallo,

 

ich verstehe nicht woran das liegt, mit meinen Player Script setze ich für einen Script der nicht Network seitig ist einen Target.

void Update() {
    if (!isLocalPlayer)
    {
	    return;
    }
    GameObject hotbar = GameObject.Find("_HOTBAR");
    hotbar.GetComponent<HotbarSynchronisation>().target = transform;

 

Der Script liegt auf einen Canvas was jeder Spieler für sich hat und er es nur sieht.

 

Der Hotbar Script sieht so aus:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class HotbarSynchronisation : MonoBehaviour {
   public Transform target;
   public Text healthtext;
   public Text manatext;
   public RectTransform healthrect;
   public RectTransform manarect;
   private float minxhealth;
   private float maxxheatlh;
   private float minxmana;
   private float maxxmana;
   private Health healthscript;
   void Start ()
   {
    minxhealth = -healthrect.rect.width;
    maxxheatlh = healthrect.localPosition.x;
    minxmana = -manarect.rect.width;
    maxxmana = manarect.localPosition.x;
   }
   void Update () {
    if (!target)
    {
	    return;
    }
    healthscript = target.GetComponent<Health>();
    healthrect = GameObject.Find("_HEALTHBAR").transform.GetChild(0).Find("_BAR").GetComponent<RectTransform>();
    healthtext = GameObject.Find("_HEALTHBAR").transform.Find("_TEXT").GetComponent<Text>();
    manarect = GameObject.Find("_MANABAR").transform.GetChild(0).Find("_BAR").GetComponent<RectTransform>();
    manatext = GameObject.Find("_MANABAR").transform.Find("_TEXT").GetComponent<Text>();
    float currentxhealth = Functions.MapValues(healthscript.curHealth, 0, healthscript.maxHealth, minxhealth, maxxheatlh);
    healthrect.localPosition = new Vector3(0, currentxhealth);
    healthtext.text = healthscript.curHealth + "/" + healthscript.maxHealth;
    /*float currentxmana = Functions.MapValues(healthscript.curHealth, 0, healthscript.maxHealth, minxhealth, maxxheatlh);
    healthrect.localPosition = new Vector3(0, currentxmana);*/
   }
}

 

Warum aktualisiert es die Hotbar nur im Editor und beim exportierten Spiel, passiert garnix?

 

Mfg Fran

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kenne deinen Code nicht, aber aus meiner Programmiererfahrung heraus würde ich sagen, dass du vermutlich irgendwo ein nicht initialisiertes Objekt (in C würde man sagen einen Nullpointer) hast. Da du recht viel GameObject.Find() verwendest, vermute ich hier die Fehlerquelle. Mache ein Development-Build und logge deine Debugausgaben über Debug.LogError(). Oder du solltest bei einem Standalone-Build deine Ausgaben auch in folgendem File finden _Data/output_log.txt

 

z.b.

healthrect = GameObject.Find("_HEALTHBAR").transform.GetChild(0).Find("_BAR").GetComponent<RectTransform>();
if ( healthrect == null) Debug.LogError("HEALTHBAR not found !!");
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Ich kenne deinen Code nicht, aber aus meiner Programmiererfahrung heraus würde ich sagen, dass du vermutlich irgendwo ein nicht initialisiertes Objekt (in C würde man sagen einen Nullpointer) hast. Da du recht viel GameObject.Find() verwendest, vermute ich hier die Fehlerquelle. Mache ein Development-Build und logge deine Debugausgaben über Debug.LogError(). Oder du solltest bei einem Standalone-Build deine Ausgaben auch in folgendem File finden _Data/output_log.txt

 

z.b.

healthrect = GameObject.Find("_HEALTHBAR").transform.GetChild(0).Find("_BAR").GetComponent<RectTransform>();
if ( healthrect == null) Debug.LogError("HEALTHBAR not found !!");

 

Es kommt auch der Fehler das es nicht gefunden wurde aber nur für den Client der außerhalb des Editors spielt wenn ich im Editor schaue ist für den Editor-Spieler (Host) dieses Objekt eingetragen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...