UNET:运行 Unity 编辑器和应用程序的差异

UNET: Differences in running with Unity Editor and application

我试图弄清楚是什么导致了使用 UNET 时出现以下错误差异:

我运行我的项目在编辑器和申请表中同时测试多人游戏功能。我正在测试的功能是 projectile creation/spawning。如果我将编辑器设为主机,将应用程序设为客户端,则只有主机可以看到弹丸。但是,当我将编辑器设置为客户端,将应用程序设置为主机时,两个玩家都可以看到弹丸。

这就是它变得更奇怪的地方:当 运行 它在两个应用程序而不是一个应用程序和编辑器上时,无论我使用什么组合,只有主机可以看到射弹。

为什么这个特定的组合有效,我怎样才能让它适用于任何设置?

这是生成代码;不确定是否是问题所在:

[Command]
public void CmdFireProjectile(Quaternion cA, Vector3 tF, string pN) {
    GameObject projPrefab = Projectile.getProjectilePrefab(pN);
    GameObject proj = (GameObject)Instantiate(projPrefab, new Vector3(transform.position.x, transform.position.y + .4f, transform.position.z) + tF, cA);
    proj.GetComponent<Projectile>().setSource(this);
    NetworkServer.Spawn(proj);
}

好的,首先我不完全理解 Unet,但我遇到了和你一样的问题,这是我调试它并尝试以下操作的方法: 1- 确保射弹预制件已添加到 NetworkManager 脚本中 2- 在您的命令中使用 hasAuthority bool 检查并在内部使用 networkspawn(如果为真和假)。 3- 从您的命令调用客户端 rpc 并在那里也使用 NetworkSpawn 4- 使用 NetworkSpawnwithClientAuthority(this.gameobject) 让我知道这些是否有效。 Nonethless 在 Unity Docs 中,networkSpawn From 命令函数应该在主机和客户端上都有效,但它似乎永远不会第一次起作用,但有时会起作用。

所以我想通了:注册要访问的弹丸预制件的class被设置为仅存在于服务器上。所以从本质上讲,客户试图制造射弹,但他们没有找到任何预制件。不确定为什么它在 Unity 编辑器中 运行 时特别有效...