Edit

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

Problem 2

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

Project Summary

我有一个非常简单的多人游戏项目,我想做的就是拥有一个玩家主机而另一个作为客户端加入 . 一旦它们连接在一起,两个玩家就可以产生一个胶囊,然后当用户点击胶囊时 . 他们应该能够拿起它并在场景中移动它,其他玩家应该能够看到这个动作 . 我可以让两个玩家连接到服务器并产生自己的胶囊,两个玩家都可以看到这个 . 移动脚本也完成了 . 但是,它仅在主机端传输 . When the client picks up the object it does not update on the server.

Problem

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

Code

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

        }
    }

Question

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