我正在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);
}
答案 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);
}