Unity网络。 transform.setparent()在客户端上不起作用

时间:2019-02-16 12:52:05

标签: unity3d unity3d-unet

我正在Unity中编写一个简单的多人棋盘游戏。

我有以下问题:transport.setparent()在客户端不起作用。 当我将游戏作为服务器启动时,一切正常。当我作为客户端连接到服务器时,transform.setParent()不会执行任何操作。

这是我的代码:

public GameObject PlayerPrefab;

private GameObject player;

// Use this for initialization
void Start () {
    if (!isLocalPlayer)
    {
        return;
    }
    Debug.Log("Spawning.");
    CmdSpawn();
}


[Command]
void CmdSpawn()
{
    player = Instantiate(PlayerPrefab);
    NetworkServer.SpawnWithClientAuthority(player, connectionToClient);
    player.transform.SetParent(GameObject.Find("BoardPanel").transform, false);
}

1 个答案:

答案 0 :(得分:0)

我找到了答案。这是我的解决方案: 步骤1)使用SyncVar在服务器和客户端之间同步父对象的netID。 步骤2)在客户端上生成对象后,使用同步的netID查找父对象并将其设置为变换的父对象。

[Command]
void CmdSpawn()
{
    Debug.Log("Spawning.");
    player = Instantiate(PlayerPrefab);
    player.GetComponent<Player>().ParentNetId = this.netId;
    NetworkServer.SpawnWithClientAuthority(player, connectionToClient);
}

并且需要在Player脚本中添加以下代码:

[SyncVar]
public NetworkInstanceId ParentNetId;

public override void OnStartClient()
{
    Debug.Log("OnStartClient.");
    transform.SetParent(GameObject.Find("BoardPanel").transform, false);
}