У меня есть кнопка, которую я могу нажать, и которая вызовет CmdEnableReadyUpUIAndResetTime для взаимодействия с сетевым идентификатором. Холст; он проходит, и его видят как владелец, так и клиенты. Но проблема в playerListReadyUpPrefab, который я пытаюсь создать, и который будет представлять имя каждого игрока и статус готовности. Эти префабы появляются только на экране владельца игрового лобби, а подключившиеся клиенты их не видят.
Код: Выделить всё
using UnityEngine;
using UnityEngine.UI;
using Mirror;
using TMPro;
using System.Collections.Generic;
public class ReadyUpProgressBar : NetworkBehaviour
{
[SerializeField] private int maximum;
[SerializeField] GameObject ReadyUpContainer;
//This is where players are populated: containerForAllPlayers
[SerializeField] private GameObject containerForAllPlayers;
//Holds all gameplayers currently
private SyncList
localGamePlayersList = new SyncList();
//PlayerItemListPrefab
[SerializeField] private GameObject playerListReadyUpPrefab;
//Map Name
[SerializeField] private TMP_Text mapChosenName;
[Command(requiresAuthority = false)]
public void CMDDisableReadyUpUI()
{
RpcDisableReadyUpUI();
}
[ClientRpc]
public void RpcDisableReadyUpUI()
{
foreach (Transform child in containerForAllPlayers.transform)
{
NetworkServer.Destroy(child.gameObject);
}
}
[Command(requiresAuthority = false)]
public void CmdEnableReadyUpUIAndResetTime(string sceneName)
{
localGamePlayersList.Clear();
foreach (PlayerReadyUpStatus playerObject in FindObjectsByType(FindObjectsSortMode.None))
{
localGamePlayersList.Add(playerObject);
}
//Clear previous player data if any
foreach (Transform child in containerForAllPlayers.transform)
{
NetworkServer.Destroy(child.gameObject);
}
//
// Populate screen with new player data
foreach (PlayerReadyUpStatus playerReadyUpStatus in localGamePlayersList)
{
string playerNameNow;
GameObject playerListItemPrefab = Instantiate(playerListReadyUpPrefab);
foreach (PlayerObjectController player in FindObjectsByType(FindObjectsSortMode.None))
{
if (playerReadyUpStatus.GetPlayerReadyStatusSteamID() == player.PlayerSteamID)
{
playerNameNow = player.PlayerName;
playerListItemPrefab.GetComponent().changePlayerNameText(playerNameNow);
playerListItemPrefab.GetComponent().changePlayerReadyStatus(false);
break;
}
}
playerListItemPrefab.transform.SetParent(containerForAllPlayers.transform);
NetworkServer.Spawn(playerListItemPrefab);
}
}
}
введите здесь описание изображения.
Только ReadyUpCanvas имеет сетевую идентификацию и сетевое преобразование.< /p>
Пример в игре при запуске скриптов:
введите здесь описание изображения
Код: Выделить всё
using UnityEngine;
using TMPro;
using System.Collections.Generic;
using Mirror;
public class MapSelectorReadyUp : NetworkBehaviour
{
[SerializeField] ReadyUpProgressBar progressBar;
[Command(requiresAuthority = false)]
public void StartForestMap()
{
RpcStartMap("Forest");
}
[ClientRpc]
private void RpcStartMap(string sceneName)
{
progressBar.CmdEnableReadyUpUIAndResetTime(sceneName);
}
}
Я работаю в Unity 6.
Дайте мне знать, если мне нужно что-то уточнить!
Подробнее здесь: https://stackoverflow.com/questions/793 ... not-client