c# - 在 UnityNetwork 中同步随机数
问题描述
我想为服务器启动时生成的对象分配随机数,但是游戏的每个实例都有自己的随机数并且它们不同步,我该如何解决?
public class Health : NetworkBehaviour
{
public Text PlanetHealth;
public const int maxHealth = 100;
[SyncVar(hook = "OnChangeHealth")]
public int currentHealth = maxHealth;
void Start()
{
if(this.gameObject.name == "GrayPlanet(Clone)")
{
currentHealth = Random.Range(0, 50);
PlanetHealth.text = currentHealth.ToString();
}
else
PlanetHealth.text = maxHealth.ToString();
}
public void TakeDamage(int amount)
{
if (!isServer)
{
return;
}
currentHealth -= amount;
if (currentHealth <= 0)
{
currentHealth = 55;
}
}
void OnChangeHealth(int currentHealth)
{
PlanetHealth.text = currentHealth.ToString();
}
}
解决方案
只需在方法的开头添加以下内容Start()
:
if (!isServer)
{
return;
}
您应该只在服务器端进行随机生成。之后,SyncVar
将完成使实例保持最新的工作。
推荐阅读
- c++ - 使用由字符串 C++ 定义的地图名称的地图
- java - 在 Selenium Web 驱动程序中迭代具有相同名称的元素时索引越界异常
- java - Wildfly:加密 EJB 远程 java 的密码
- powershell - 过滤哈希表数组
- microsoft-graph-api - 无法更新事件 Beta 端点
- node.js - 我的nodejs api与查询参数完美配合,但同样的事情在网络浏览器中不起作用
- powershell - 有人可以分解这个 Powershell 脚本的一部分并解释它的作用和工作原理吗?
- sql - 如何使用仅在一行上不匹配的多个条件进行查询
- c++ - 使用 STM32L432 的 Mbed OS 5 模拟脉冲计数器
- java - java 7 j2html无法加载类