0

编辑:除了下面的答案之外,这些链接还帮助解决了这个问题......

https://forum.unity.com/threads/ui-buttons-to-spawn-units-buildings.356813/ https://forum.unity.com/threads/network-spawned-objects-not-showing-up- at-other-clients.501724/

我正在实例化一个对象并将其作为父对象,这是从宇宙飞船上拍摄的,它应该显示在所有播放器屏幕上。这仅在主机开枪时才有效。当客户开枪时,只有该客户可以看到该枪。

对于网络身份,船(父)设置为本地玩家权限。对于镜头,未选择本地或服务器。

这是创建镜头的代码...

public class fire : NetworkBehaviour{

public GameObject shockwave;
public GameObject ship;
private GameObject eb;
private GameObject go;

private int energy = 4;
private float targetTime = 10.0f;

public override void OnStartLocalPlayer()
{
    base.OnStartLocalPlayer();
    gameObject.name = "Local";
}

public void createshockwave()
{
    ship = GameObject.Find("Local");
    Debug.Log(ship);
    if (!ship.GetComponent<NetworkIdentity>().isLocalPlayer)
    {
        return;
    }

    go = Instantiate(shockwave, ship.transform.position, ship.transform.rotation);
    go.transform.parent = ship.transform;
    NetworkServer.Spawn(go);
}
}

关于什么可能导致对象在由主机而不是客户端拍摄时显示在其他屏幕上的任何线索?

4

1 回答 1

1

这有点棘手,我想您正在使用 UNet 而不是 Photon。

我不能确定我是否有合适的解决方案,但我设法使用 UNET 中可用的 ClientRPC 和 Command 操作使其工作。

在方法前使用 [Command] 动作可以让客户端调用服务器,使用 [ClientRPC] 动作将调用服务器并在客户端上运行。

因此,我提出了一种可能不安全但可行的方法,您可以简单地调用 [Command] 方法,并在其中调用 [ClientRPC] 方法。这将使您的愿望成为可能。

你可以在这里阅读它https://docs.unity3d.com/Manual/UNetActions.html

于 2018-06-03T17:57:24.617 回答