- Home /
Unity Networking player own UI
Hi, thank you for reading this post. I have a very simple but utterly annoying problem. I`m using the Unity health script from the documentation. It works, but how do I use the player`s currentHealth variable in a text element that is a child of it? So I can display it. I tried a million different ways which all failed. The ways I tried kinda stacked the text of all players over each other. I just want the player to see his own health on its screen and for the other players to see their health on their screen.
It may be a noob question but I couldn`t for the life of me find an answer.
The used health script:
using UnityEngine; using UnityEngine.UI; using UnityEngine.Networking; using System.Collections;
public class Health : NetworkBehaviour {
public const int maxHealth = 100;
[SyncVar(hook = "OnChangeHealth")]
public int currentHealth = maxHealth;
public RectTransform healthBar;
public void TakeDamage(int amount)
{
if (!isServer)
return;
currentHealth -= amount;
if (currentHealth <= 0)
{
currentHealth = 0;
Debug.Log("Dead!");
}
}
void OnChangeHealth (int health)
{
healthBar.sizeDelta = new Vector2(health, healthBar.sizeDelta.y);
}
}
@JuliusdeBlaaij Did you find any work around or solution to this? I too need to implement the same. Please do post any results if you find any solution.
Answer by N1warhead · Oct 13, 2017 at 04:52 AM
If it's anything like Photon (and I'm fairly certain it is). Attach the Canvas and maybe even the EventSystem for the Canvas to your Player prefab.
Then here are the steps. MAKE SURE THE CANVAS and the EVENT SYSTEM ARE TURNED OFF. When you spawn your player you'll probably have to do something along the lines of
// All we do is reactivate the Canvas - only locally on our machine, then set their parents to null.
GameObject playerPrefabToSpawn;
if(playerPrefabToSpawn.GetComponent<NetworkIdentity>.isLocalPlayer){
playerPrefabToSpawn.transform.Find("Canvas").SetActive(true);
playerPrefabToSpawn.transform.Find("EventSystem").SetActive(true);
playerPrefabToSpawn.transform.Find("Canvas").SetParent(null);
playerPrefabToSpawn.transform.Find("EventSystem").SetParent(null);
}
Your answer
Follow this Question
Related Questions
How do I stop EventSystem.currentSelectedGameObject from changing on a button press 0 Answers
Unity networking tutorial? 6 Answers
Second Clients canvas won't register clicks? 0 Answers
Using back button to close keyboard on Android seems bugged 0 Answers
Multiplayer UI : What's the best implementation for a waypoint-like system? 0 Answers