I keep getting error messages
“Failed to spawn server object, did you forget to add it to the NetworkManager? assetId=123… netId=1”
and
“Could not spawn assetId=123… scene=0 netId=1”
I have MyNetworkManager:
using Mirror;
using System.Collections;
using UnityEngine;
public class MyNetworkManager : NetworkManager
{
// Overrides the base singleton so we don't
// have to cast to this type everywhere.
public static new MyNetworkManager singleton { get; private set; }
[Header("My Modifications")]
public bool
debugIO = true;
public string ipAddress = "localhost";
private StarterAssets.StarterAssetsInputs _input;
[Header("0 = girl, 1 = boy")]
public int playerId = 0;
public GameObject[] characterPrefabs;
/// <summary>
/// Runs on both Server and Client
/// Networking is NOT initialized when this fires
/// </summary>
public override void Awake()
{
#if UNITY_SERVER
//networkAddress = ipAddress;
Debugger("!!!! Starting Server !!!!");
StartServer();
#endif
Debugger("Awake");
base.Awake();
singleton = this;
}
public void StartClientbutton(int _playerID)
{
playerId = _playerID;
StartClient();
//Cursor.visible = true;
}
public void StartServerButton() {
StartServer();
//Cursor.visible = true;
}
public void StartHostButton(int _playerID) {
playerId = _playerID;
StartHost();
}
public void Debugger(string debug) {
if (debugIO)
{
//debug
Debug.Log("[] my debug []" + debug);
}
}
public override void OnStartServer()
{
base.OnStartServer();
Debugger("OnStartServer");
NetworkServer.RegisterHandler<NetworkConnectionToClientMessage>(OnCreateCharacter);
}
public override void OnClientConnect()
{
base.OnClientConnect();
Debugger("OnClientConnect");
NetworkConnectionToClientMessage netConnectClientMessage = new NetworkConnectionToClientMessage
{
playerCharacter = StaticVariables.playerCharacter
};
NetworkClient.Send(netConnectClientMessage);
}
public void OnCreateCharacter(NetworkConnectionToClient conn, NetworkConnectionToClientMessage message)
{
Debugger($"OnCreateCharacter: NetworkConnectionToClient - {conn}");
GameObject netPlayerPrefab = Instantiate(characterPrefabs[playerId]);//base.playerPrefab
NetworkServer.AddPlayerForConnection(conn, netPlayerPrefab);
}
}
public struct NetworkConnectionToClientMessage : NetworkMessage
{
public int playerCharacter;
}
public class StaticVariables {
public static int playerCharacter = 0;
}
and a simple player script:
using Mirror;
using UnityEngine;
using TMPro;
using Cinemachine;
using UnityEngine.UI;
using UnityEngine.InputSystem;
public class SimpleNetPlayer : NetworkBehaviour
{
//-- Inishilising variable --//
[SyncVar]
SimpleNetPlayer simpleNetPlayer;
//-- player movement --//
public float playerMoveSpeed = 2.0f;
Vector2 PlayerMovementInputVector;
float moveX;
float moveZ;
//-- Input Variables --//
private PlayerInput playerInput;
private MyInputActionControls myInputActions;
// -- Animation --//
public Animator animator;
private void Awake()
{
//Inishilise
simpleNetPlayer = this;
}
//==== On Start Local Player ====//
public override void OnStartLocalPlayer()
{
//setup Player input
PlayerInputSetup();
// Find player camera and tell it to look at this player
GameObject.Find("Player Camera").GetComponent<CinemachineVirtualCamera>().Follow = this.gameObject.transform.GetChild(0).transform;
Camera.main.transform.SetParent(transform);
Camera.main.transform.localPosition = new Vector3(0, 0, 0);
}
//==== Input Sytem ====//
public void PlayerInputSetup()
{
playerInput = GetComponent<PlayerInput>();
myInputActions = new MyInputActionControls();
myInputActions.Player.Enable();
}
//==== Update ====//
[Client]
private void Update()
{
if (!isLocalPlayer)
{
return;
}
PlayerMove();
}
//==== Player Move ====//
public void PlayerMove()
{
PlayerMovementInputVector = myInputActions.Player.Move.ReadValue<Vector2>();
moveX = PlayerMovementInputVector.x * Time.deltaTime * 110.0f;// _input.move.x
moveZ = PlayerMovementInputVector.y * Time.deltaTime * playerMoveSpeed;//_input.move.y
transform.Translate(0, 0, moveZ);
transform.Rotate(0, moveX, 0);
if (isLocalPlayer)
{
animator.SetFloat("Speed", PlayerMovementInputVector.y);
}
}
}