Я пытаюсь начать работу с сетевыми функциями Unity и столкнулся с проблемой при попытке создания объектов. Я попытался создать простую демонстрацию, следуя документации, найденной здесь, сервер порождает объект, который меняет цвет каждую секунду, каждый подключенный клиент должен видеть этот объект и его цвет меняется. Клиент/сервер подключаются, но объект появляется только на стороне сервера (без сообщений об ошибках).
Client.cs
public class Client : MonoBehaviour
{
public GameObject boxPrefab;
private NetworkClient networkClient;
private static void OnConnected(NetworkMessage networkMessage)
{
Debug.Log(string.Format("[ID: {0}] Connected.", networkMessage.conn.connectionId));
}
private void Start()
{
networkClient = new NetworkClient();
ClientScene.RegisterPrefab(boxPrefab);
networkClient.RegisterHandler(MsgType.Connect, OnConnected);
networkClient.Connect("127.0.0.1", 5172);
Debug.Log("Connecting...");
}
}
Server.cs
public class Server : MonoBehaviour
{
public BoxSpawner boxSpawner;
private void OnConnection(NetworkMessage networkMessage)
{
Debug.Log(string.Format("[ID: {0}] Connected.", networkMessage.conn.connectionId));
}
private void Start()
{
NetworkServer.RegisterHandler(MsgType.Connect, OnConnection);
NetworkServer.Listen("127.0.0.1", 5172);
Debug.Log("Listening...");
NetworkServer.SpawnObjects();
boxSpawner.Spawn();
}
}
BoxSpawner.cs
public class BoxSpawner : NetworkBehaviour
{
public GameObject boxPrefab;
public void Spawn()
{
GameObject box = (GameObject) Instantiate(boxPrefab, transform.position, transform.rotation);
NetworkServer.Spawn(box);
}
}
И клиент, и сервер имеют префаб с именем Box, на котором есть следующий скрипт, а также компонент NetworkIdentity.
Box.cs
public class Box : NetworkBehaviour
{
[SyncVar]
private Color32 color;
private IEnumerator ChangeColour()
{
while (true)
{
color = new Color32((byte)Random.Range(0, 255), (byte)Random.Range(0, 255),
(byte)Random.Range(0, 255), 255);
yield return new WaitForSeconds(1.0f);
}
}
private void Start()
{
if (isServer)
{
StartCoroutine(ChangeColour());
}
}
private void Update()
{
GetComponent<SpriteRenderer>().color = color;
}
}
Я также загрузил оба проекта клиент/сервер в репозиторий GitHub здесь, если кто-то может взгляните и помогите мне, я был бы очень признателен, спасибо.
Примечание. Я пытаюсь сделать это без использования NetworkManager.