对象在主机上可见但在客户端上不可见

Object visible on host but not client

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

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);
}
}

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

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

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

在方法前面使用 [Command] 操作允许客户端调用服务器,使用 [ClientRPC] 操作将调用服务器并 运行 调用客户端。

所以我做了一个可能不安全但可行的方法,您可以简单地调用一个 [Command] 方法,然后在其中调用一个 [ClientRPC] 方法。这将使您想要的成为可能。

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