Screen space overlay canvas problems.
Hello everyone I am working on the HUD UI for my game. I am trying to display the current health to the player via a canvas that is set to screen space overlay to create the desired effect. So far I have a canvas that displays the health in world space for everyone to see. I thought I could simply change the canvas render mode to screen space overlay and adjust the position of the canvas. Everything works properly until the health on the HUD needs to change, when the health is changed the HUD shows the new health but behind that is the old health. So for example if you are at 50 and someone hits you with a projectile you should be at 40, instead it shows 50 with a 40 right on top of it, and if you are hit again the 40 goes away and a 30 is placed but the 50 remains. WHY DOES THE 50 REMAIN!? Why doesn't this respond the way the world space render mode does? That one works just fine. Here is some code....
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
public class Health : NetworkBehaviour {
public int maxHealth;
public GameObject HealthPackPrefab;
public Transform HealthPackTransform;
public Vector3 colPos;
[SyncVar(hook="OnHealthChanged")]
public int currentHealth;
public Text HealthScore;
public Text HUDHP;
void Start () {
HealthScore.text = currentHealth.ToString();
HUDHP.text = currentHealth.ToString();
}
void OnHealthChanged(int updatedHealth){
HealthScore.text = updatedHealth.ToString();
HUDHP.text = updatedHealth.ToString();
}
Answer by nickg309 · May 29, 2017 at 09:28 AM
I fixed the issue. I realized that what was happening when I launched the game on a network I had every player's health being reported to the same canvas, resulting in the overlap effect, and for some reason I had to clear the default text in the canvas or that would also show up with the health values. I fixed this by adding a simple return script before the HUDHP as fallows.
void Start () {
HealthScore.text = currentHealth.ToString();
if(!isLocalPlayer){
return;
}
HUDHP.text = currentHealth.ToString();
}
void OnHealthChanged(int updatedHealth){
if(!isLocalPlayer){
return;
}
HealthScore.text = updatedHealth.ToString();
HUDHP.text = updatedHealth.ToString();
}
Just wanted to put this put for people who are trying to look for answers to adding networking to their game and having UI issues. I hope it helps someone!
Your answer
Follow this Question
Related Questions
Weird artefacts (black spots) in Camera Space UI elements 1 Answer
what is the main camera size? 1 Answer
In which layer is drawn a Canvas with render mode - Screen Space Overlay - ? 0 Answers
Prevent World Space canvas render mode to overlay other game objects 0 Answers
Major Issues with Camera Switching 1 Answer