0

编辑

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

问题 2

我遇到的下一个问题是我现在可以移动由客户端生成的胶囊,并且主机可以随意移动它多次。我现在遇到的问题是,当主机生成胶囊时,客户端根本无法移动它,并且我在客户端得到了一种故障效果,而胶囊仍然没有在主机端移动。有没有理由为什么它只能以一种方式工作而不是另一种方式?起初我认为这可能与 Spawn 与 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 很陌生,这感觉像是一个菜鸟错误。

4

0 回答 0