Единство сетей.transform.setparent () не работает на стороне клиники - PullRequest
0 голосов
/ 16 февраля 2019

Я пишу простую многопользовательскую настольную игру в 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 Ответ

0 голосов
/ 16 февраля 2019

Я нашел ответ.Вот мое решение: Шаг 1) Используйте SyncVar для синхронизации netID родительского объекта между сервером и клиентом.Шаг 2) Когда объект порождается на клиенте, найдите родителя с помощью синхронизированного netID и установите его в качестве родителя вашего преобразования.

[Command]
void CmdSpawn()
{
    Debug.Log("Spawning.");
    player = Instantiate(PlayerPrefab);
    player.GetComponent<Player>().ParentNetId = this.netId;
    NetworkServer.SpawnWithClientAuthority(player, connectionToClient);
}

И вам нужно добавить этот код в скрипт Player:

[SyncVar]
public NetworkInstanceId ParentNetId;

public override void OnStartClient()
{
    Debug.Log("OnStartClient.");
    transform.SetParent(GameObject.Find("BoardPanel").transform, false);
}
...