客户端不在Unet中执行命令

时间:2017-09-18 19:47:41

标签: c# unity3d unet

修改

好的,所以我通过在胶囊上添加一个刚体部件来解决这个问题。我在某个地方读过,显然你必须有一个才能在服务器上移动。

问题2

我的下一个问题是我现在可以移动一个由客户端产生的胶囊,并且主机可以随意移动它多次。我现在遇到的问题是,当主机产生一个胶囊时,客户端根本无法移动它,我在客户端获得了一种故障效应,并且胶囊仍然没有在主机端移动。有没有理由说它只能单向工作而不是相反?我一开始认为它可能与Spawn vs SpawnWithClientAuthority有关,但这似乎没有什么区别。

项目摘要

我有一个非常简单的多人游戏项目,我想做的就是拥有一个玩家主机而另一个作为客户端加入。一旦它们连接在一起,两个玩家就可以产生一个胶囊,然后当用户点击胶囊时。他们应该能够拿起它并在场景中移动它,其他玩家应该能够看到这个动作。我可以让两个玩家连接到服务器并产生自己的胶囊,两个玩家都可以看到这个。移动脚本也完成了。但是,它仅在主机端传输。 当客户端选择对象时,它不会在服务器上更新。

问题

我做了一些调试,发现当我在客户端上调用命令时,它根本没有通过换行符和简单的调试语句执行。

代码

 public void OnInputClicked(InputClickedEventData eventData)
    {
        Debug.Log("clicked");
        if (isLocalPlayer)
        {
            if (Physics.Raycast(transform.position, direction: transform.forward, hitInfo: out hit, maxDistance: range))
            {
                Debug.Log("Hit capsule");

                objectID = GameObject.Find(hit.transform.name);
                objNetId = objectID.GetComponent<NetworkIdentity>();



                CmdAssignAuthority(objNetId);
                Debug.Log("Cmd done");
            }
            else
            {
//else if the player is releasing the object we want to release authority

                if (objNetId != null)
                {
                    CmdAssignAuthority(objNetId);

                }
            }
        }

    [Command]
    void CmdAssignAuthority(NetworkIdentity target)
    {
        Debug.Log("inside cmd");
        NetworkConnection current = target.clientAuthorityOwner;

        if (current != null && current != connectionToClient)
        {
            target.RemoveClientAuthority(current);

            target.AssignClientAuthority(connectionToClient);

        }
        else 
        {
            if (current != null)
            {
                target.RemoveClientAuthority(current);

            }

            if (current == null)
            {
                target.AssignClientAuthority(connectionToClient);
            }

        }
    }

问题

我是否正确调用此命令?该脚本附加到播放器预制件,并且胶囊预制件包含网络ID和网络变换。我对Unet很新,这感觉就像一个菜鸟错误。

0 个答案:

没有答案