Unity UNet客户机构



我正在制作一个多人游戏,并试图在客户端实例化一个新对象。该对象应该由该玩家单独控制。

我尝试过在客户端上实例化它,然后生成它:

public class Player : NetworkBehaviour
{
    [SerializeField]
    private Card _testCard;
    void Update()
    {
        if (!isLocalPlayer) return;
        if (Input.GetKeyDown(KeyCode.Space))
        {
            RaycastHit hit;
            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
            {
                var card = Instantiate(_testCard);
                card.transform.position = hit.point;
                card.Name = "Test";
                NetworkServer.Spawn(card.gameObject);
                //or call this from a command, shown below
            }
        }
    }
    /*[Command]
    void CmdPlayTestCard(string name, Vector3 position)
    {
        var card = Instantiate(_testCard);
        card.transform.position = position;
        card.Name = name;
        NetworkServer.Spawn(card.gameObject);
    }*/
}

这会在客户端上生成对象,它可以由它控制,但不会在服务器上生成。

我在Command中也做了同样的操作,然后它在任何地方都被实例化,但客户端无法控制它。但是服务器可以控制它。

做这件事的正确方法是什么?创建一个应该由其中一个玩家而不是服务器控制的对象?

我试着在谷歌上搜索,但什么也找不到。

谢谢!

我发现这在Unity 5.2中是混合的,当前的测试版发行说明将其列为一个功能:"网络:增加了对非玩家对象客户端权限的支持。">

因此,这将在9月份为每个人带来。

Oddler,我不知道答案,但在irc.greenode.net频道#unity3d unet中有一个社区可能会!

此外,这里还收集了一些资源和代码片段:https://goo.gl/UmBBpM

最新更新