控制谁产生单位

时间:2018-02-10 18:32:19

标签: c# unity3d network-programming unity3d-unet

使用统一网络服务(和高级API)我试图让2个客户在地图上各有一个建筑物,点击建筑物产生一个单位并将其移向目标。但是我遇到的问题是如何控制谁可以点击建筑物。例如,“玩家1”应该只能点击“建筑物1”来产生单位,“玩家2”应该只能点击“建筑物2”来产生单位。

点击后,我设置了两个预制件(房屋)来生成我的单元。

public class ClickDetection : NetworkBehaviour {

    public GameObject _spawnUnit;
    public Transform _spawnPoint;

    void OnMouseDown()
    {
        CmdSpawnUnit();
    }

    [Command]
    private void CmdSpawnUnit()
    {
        var spawnUnit = Instantiate(_spawnUnit, _spawnPoint.position, Quaternion.identity);
        NetworkServer.Spawn(spawnUnit);
    }
}

然而,当我运行它时,只有主机可以单击这两个建筑物来产生单位。我真的不知道如何让一个人由客户控制,另一个由主人控制。

有没有简单的方法来确定谁应该做什么?

我不希望这些是玩家预制件,我想最终一个玩家能够控制几个建筑物(想想RTS)

1 个答案:

答案 0 :(得分:1)

免责声明:我对网络编程没有经验,但这些观察和建议可能会让您更接近解决方案。

  

命令从客户端上的播放器对象发送到服务器上的播放器对象。为了安全起见,命令只能从您的玩家对象发送,因此您无法控制其他玩家的对象。

来源:https://docs.unity3d.com/Manual/UNetActions.html

由于您告诉主持人可以控制两个建筑物,因此看起来主机对它们都具有本地玩家权限。至少如果我正确阅读文档。

根据此链接:

https://forum.unity.com/threads/network-spawning-of-game-objects-not-working.391315/

"命令必须从播放器对象或本地播放器权限设置为true的对象运行。"

您是否已将其设置为由网络标识中的本地播放器控制?

如果您可以显示相关对象的检查员图片,将会很有帮助。

现在,我还没有做过策略游戏,但我怀疑你还需要分配客户端权限:

https://docs.unity3d.com/ScriptReference/Networking.NetworkServer.SpawnWithClientAuthority.html

这意味着另一种产卵方法。

请确保在建筑物的网络标识中分配本地播放器作者,如果没有解决,请显示完整的检查窗口。