【发布时间】:2019-09-03 14:01:14
【问题描述】:
我尝试在服务器-客户端之间同步浮点值。
在服务器屏幕上有老板 HpBar 脚本在场景中设置了 MAXHP 值。
玩家预制件拥有自己的boss HP UI和localhp脚本,它们将从服务器中的HpBar脚本获取当前boss HP值。
当用户按下攻击按钮时,它会将伤害值发送到 HpBar 脚本,然后它应该更新到播放器预制件。但它不会同步在一起。谢谢
图片在这里 https://imgur.com/a/KrYtC3T
localPlayerHPBAR 脚本:
public class localHpBar : NetworkBehaviour
{
public HpBar serverHp;
public float localhpPoint;
public Image localhpBar;
// Start is called before the first frame update
void Start()
{
serverHp = GameObject.FindObjectOfType<HpBar>();
//Get OBJ of serverHP
}
public void sendDamage(float dmg)
{
serverHp.TakeDamage(dmg); //SendDamageToserver
}
// Update is called once per frame
void Update()
{
//get HP point from server
localhpPoint = serverHp.sum;
localhpBar.fillAmount = localhpPoint;
}
}
服务器 HpBar
public class HpBar : NetworkBehaviour
{
public Image HP;
public float MaxHP;
float currentHP;
public float localhp;
[SyncVar] public float sum;
void Start()
{
//set CURRENT HP
currentHP = MaxHP;
}
[ClientRpc]
void rpcDamage(float dmg)
{
sum = currentHP / MaxHP;
HP.fillAmount = sum;
}
public void TakeDamage(float dmg)
{
//recieve DamageFrom client
currentHP = currentHP - dmg;
rpcDamage(currentHP);
}
}
【问题讨论】: