所以我生产玩家和他们拥有的枪,在主机上它工作得很好,但在客户机上枪不会成为对象的实例。下面是代码
[Command]
void CmdSpawn() {
gun = (GameObject)Instantiate(gunToEquip, weaponPosition.position, weaponPosition.rotation);
NetworkServer.SpawnWithClientAuthority(gun, connectionToClient);
gun.transform.parent = weaponPosition;
}发布于 2016-05-23 03:41:47
首先,您没有在客户端上设置父级。仅在服务器上。主机同时是服务器和客户端,所以它是工作的。第二,你有没有把枪的预制件拖到网络管理员的可产生的预制件槽里?
另外,我认为你不应该这样做:
gun.transform.parent = weaponPosition;用它来代替:
gun.transform.SetParent(weaponPosition);试一试:
[Command]
void CmdSpawn()
{
gun=(GameObject)Instantiate(gunToEquip,weaponPosition.position,weaponPosition.rotation);
gun.transform.SetParent(weaponPosition);
RpcSpawn();
}
[ClientRpc]
void RpcSpawn()
{
if(NetworkServer.active) return;
gun = (GameObject)Instantiate(gunToEquip, weaponPosition.position, weaponPosition.rotation);
gun.transform.SetParent(weaponPosition);
}发布于 2016-10-20 17:11:58
它似乎是Unity 5.1 Networking - Spawn an object as a child for the host and all clients的复制品
这里讨论的想法是在生成时同步父对象的网络ID,例如在服务器端:
var gun = Instantiate (...);
gun.parentNetId = this.netId;
NetworkServer.Spawn (gun);然后在客户端上:
// GunController.cs
[SyncVar]
public NetworkInstanceId parentNetId;
public override void OnStartClient()
{
GameObject parentObject = ClientScene.FindLocalObject(parentNetId);
transform.SetParent(parentObject.transform);
}https://stackoverflow.com/questions/37378753
复制相似问题