统一联网。 transform.setparent() 在客户端不工作
Unity networking. transform.setparent() not working on a clinet side
我正在用 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) 使用 SyncVar 在服务器和客户端之间同步父对象的 netID。
步骤 2) 当对象在客户端上生成时,使用同步的 netID 找到父对象并将其设置为转换的父对象。
[Command]
void CmdSpawn()
{
Debug.Log("Spawning.");
player = Instantiate(PlayerPrefab);
player.GetComponent<Player>().ParentNetId = this.netId;
NetworkServer.SpawnWithClientAuthority(player, connectionToClient);
}
并且需要在播放器脚本中添加此代码:
[SyncVar]
public NetworkInstanceId ParentNetId;
public override void OnStartClient()
{
Debug.Log("OnStartClient.");
transform.SetParent(GameObject.Find("BoardPanel").transform, false);
}
使用它来查找父对象:-
转换 parentTransform = PhotonView.Find(parentid).gameObject.transform;
然后像这样调用rpc在客户端创建父对象:-
this.GetComponent().RPC("RPC_DropObject", RpcTarget.AllBuffered, 位置, 旋转, hasParent, parent.gameObject.GetComponent().ViewID);
我正在用 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) 使用 SyncVar 在服务器和客户端之间同步父对象的 netID。 步骤 2) 当对象在客户端上生成时,使用同步的 netID 找到父对象并将其设置为转换的父对象。
[Command]
void CmdSpawn()
{
Debug.Log("Spawning.");
player = Instantiate(PlayerPrefab);
player.GetComponent<Player>().ParentNetId = this.netId;
NetworkServer.SpawnWithClientAuthority(player, connectionToClient);
}
并且需要在播放器脚本中添加此代码:
[SyncVar]
public NetworkInstanceId ParentNetId;
public override void OnStartClient()
{
Debug.Log("OnStartClient.");
transform.SetParent(GameObject.Find("BoardPanel").transform, false);
}
使用它来查找父对象:- 转换 parentTransform = PhotonView.Find(parentid).gameObject.transform;
然后像这样调用rpc在客户端创建父对象:- this.GetComponent().RPC("RPC_DropObject", RpcTarget.AllBuffered, 位置, 旋转, hasParent, parent.gameObject.GetComponent().ViewID);