UNET:使用Unity Editor和应用程序运行时的差异

时间:2016-04-20 03:17:06

标签: c# unity3d unity3d-unet

我试图找出使用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);
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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