Я играю с Unity 5 в сети HLAPI. Я не хочу использовать NetworkManager, потому что я не хочу платить за многопользовательские сервисы Unity (серверы Matchmaker и Relay).UNet: Не удалось создать серверный объект (не используя NetworkManager)
Я пытаюсь создать Игрока на Клиенте, когда Клиент подключается к Серверу. Я могу получить клиент правильно подключиться к серверу, но нерест терпит неудачу на клиенте со следующей ошибкой:
Failed to spawn server object, assetId=b861a662c70615a40971e7bab10e4e14 netId=1
UnityEngine.Networking.NetworkIdentity:UNetStaticUpdate()
Обратите внимание, что на сервере, объект игрока правильно нерестится.
Минимальная репродукция:
Я в проекте Unity 2D, и я прикрепил следующий сценарий к моей главной камере:
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Networking.NetworkSystem;
public class MenuMinimalRepro : MonoBehaviour
{
private NetworkClient networkClient;
void OnGUI()
{
if (this.networkClient != null && this.networkClient.isConnected)
{
GUI.Label(new Rect(100, 25, 150, 25), "Running as Client");
}
else if (NetworkServer.active)
{
GUI.Label(new Rect(100, 25, 150, 25), "Running as Server");
}
else
{
if (GUI.Button(new Rect(100, 25, 150, 25), "Start as Client"))
{
this.StartClient();
}
if (GUI.Button(new Rect(100, 50, 150, 25), "Start as Server"))
{
this.StartServer();
}
}
}
public void StartServer()
{
NetworkServer.Listen(54321);
NetworkServer.RegisterHandler(MsgType.AddPlayer, OnAddPlayerServer);
}
public void StartClient()
{
this.networkClient = new NetworkClient();
this.networkClient.RegisterHandler(MsgType.Connect, OnConnectedClient);
this.networkClient.Connect("localhost", 54321);
}
// Connected handler for the client side
public void OnConnectedClient(NetworkMessage netMsg)
{
ClientScene.AddPlayer(this.networkClient.connection, 0);
}
// AddPlayer handler for the server side
public void OnAddPlayerServer(NetworkMessage netMsg)
{
AddPlayerMessage msg = netMsg.ReadMessage<AddPlayerMessage>();
GameObject newPlayer = (GameObject)Instantiate(Resources.Load("Prefabs/Player"));
NetworkServer.AddPlayerForConnection(netMsg.conn, newPlayer, msg.playerControllerId);
}
}
Моего объект игрок является простым спрайтом, что я 'сделана в Prefab с компонентом NetworkIdentity (see my Prefab in the Inspector). Мой Player Prefab находится в папке «Ресурсы», поэтому я могу легко загрузить его из кода (see my Prefab in the Project View).
Я запускаю фоновый экземпляр игры (используя Ctrl + B), и я запускаю его как сервер, а затем я нажимаю кнопку «Воспроизвести» в редакторе Unity и запускаю этот экземпляр в качестве клиента. Затем Unity сообщает об ошибке, о которой я упоминал ранее.
Кто-нибудь знает, что я могу делать неправильно?
Если кто-то использует NetworkingManager для обработки spwaning и в какой-то момент получить ошибку ниже: - «Объект сцены Spawn не найден для 1 UnityEngine.Networking.NetworkIdentity: UNetStaticUpdate()« попытайтесь перестроить ваш сбор или удалить метафайлы. –