How do I sync health meters via Photon?
How do I sync health meters via Photon? I have the health value synced so I can observe in the inspector that each player's health is synced appropriately. However, when I try to sync the actual meters, nothing happens, the meters only change client side.
In case the hierarchy is important, I have the meter fillAmount as a child of a mask that is a child of the entire UI for that player. The script for the meter itself is on the parent object and receives messages from the player's health script (which itself is a subclass of a generic health class). I have tried using RPC calls and serialization but nothing seems to work and I am quite stumped on what to do. Here are the calls in the script:
using UnityEngine;
public class PlayerHealth_MP : Health_MP {
[SerializeField] private string playerHUD;
private PhotonView meter;
private string dmgMask;
public string DamageMask { get { return dmgMask; } set { dmgMask = value; } }
private bool isInvincible;
public bool IsInvincible { set { isInvincible = value; } }
protected override void Start()
{
base.Start();
isInvincible = false;
meter = PlayerClass_MP.playerClass.HUDList[PlayerClass_MP.playerClass.GetPlayerNumber(PhotonNetwork.player)].GetComponent<PhotonView>();
meter.photonView.RPC("RunMeterChange", PhotonTargets.All, currentHitPoints, maxHealth); // Sends the initial health values to the health meters.
}
protected override void OnEnable()
{
base.OnEnable();
isInvincible = false;
}
public override void DamageHealth(float value)
{
base.DamageHealth(value);
meter.photonView.RPC("RunMeterChange", PhotonTargets.All, currentHitPoints, maxHealth); // This only works client side, no changes can be seen on other clients.
}
}
In addition, the health class inherits from Photon.PunBehaviour and I have the health and meter both attached to a PhotonView. I also have the meter using OnPhotonSerializeView as well, which looks like this:
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
{
if (stream != null && meter != null)
{
stream.SendNext(meter.fillAmount);
stream.SendNext(meter.color);
}
}
else
{
if (stream != null && meter != null)
{
meter.fillAmount = (float)stream.ReceiveNext();
meter.color = (Color)stream.ReceiveNext();
}
}
}
However, none of this works and I have no idea what to do. The meters work client side but do not work for other clients. Any assistance would be appreciated, thanks.
Your answer
![](https://koobas.hobune.stream/wayback/20220612151312im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Photon Network, synchronize a int over the network. 1 Answer
How to improve voice quality in Photon Voice? 1 Answer
Setting and serializing an object state visible/invisible through a random variable? 0 Answers
Why does NetworkServer.ReplacePlayerForConnection not recognize the instantiated object parameter? 0 Answers