0

我试图找出在使用 UNET 时导致以下错误差异的原因:

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

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

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

这是产卵代码;不确定是否是问题:

[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);
}
4

2 回答 2

1

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

于 2016-04-21T23:04:40.183 回答
0

好的,首先我不完全理解 Unet,但我遇到了与您相同的问题,这是我调试它并尝试以下操作:1-确保将射弹预制件添加到 NetworkManager 脚本 2-在您的命令中使用 hasAuthority bool如果 true 和 false,请检查并在内部使用 networkspawn。3- 从您的命令调用客户端 rpc 并在那里使用 NetworkSpawn 4- 使用 NetworkSpawnwithClientAuthority(this.gameobject) 让我知道这些是否有效。尽管如此,在 Unity Docs 中,networkSpawn From 命令功能应该在主机和客户端上都可以工作,但它似乎从来没有第一次工作,但有时它会工作。

于 2016-04-20T06:17:13.430 回答