Объект виден на хосте, но не на клиенте - PullRequest
0 голосов
/ 03 июня 2018

РЕДАКТИРОВАТЬ: В дополнение к ответу ниже, эти ссылки помогли решить проблему ...

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

Любые подсказки относительно того, что может вызвать отображение объекта надругие экраны при съемке хостом, а не клиентом?

1 Ответ

0 голосов
/ 03 июня 2018

Это немного сложно, и я полагаю, что вы работаете с UNet, а не с Photon.

Не могу точно сказать, есть ли у меня правильное решение, но мне удалось заставить его работать, используя ClientRPC и Commandдействия, доступные в UNET.

Использование действия [Command] перед методом позволяет клиенту выполнить вызов серверу, а использование действия [ClientRPC] вызовет сервер и запустится на клиентах.

Итак, я выбрал небезопасный, но выполнимый подход, в котором вы можете просто вызвать метод [Command], а внутри него вызвать метод [ClientRPC].Что сделает возможным то, что вы желаете.

Вы можете прочитать об этом здесь https://docs.unity3d.com/Manual/UNetActions.html

...