Я относительно новичок в Unity и решил сделать простую многопользовательскую игру. После реализации многопользовательского режима возникли две основные проблемы. Во-первых, каждый человек, который присоединяется, будет иметь скорость, в n раз превышающую предполагаемую, где n - количество игроков после того, как игрок присоединился. Во-вторых, у меня есть очень простой скрипт камеры, в котором он отключает камеру, если она не привязана к локальному плееру, и включает ее, если она есть. Однако это не работает, поскольку каждый, кто присоединяется, не может подключиться ни к какой камере, и хост быстро переключается между камерами.
Вот код:
using Mirror;
using UnityEngine;
public class PlayerObject : NetworkBehaviour
{
public GameObject playerPrefab;
public KeyCode left;
public KeyCode right;
public float speed;
GameObject myPlayerUnit;
void Start()
{
if (isLocalPlayer == false)
{
return;
}
//Instantiate(playerPrefab);
CmdSpawn();
Debug.Log(myPlayerUnit == null);
}
void Update()
{
FindObjectOfType<Camera>().enabled = false;
if (isLocalPlayer == false)
{
return;
}
CmdSetCamera(true);
if (Input.GetKey(left))
{
CmdMove(false);
}
if (Input.GetKey(right))
{
CmdMove(true);
}
}
[Command]
void CmdSpawn()
{
GameObject go = Instantiate(playerPrefab);
myPlayerUnit = go;
NetworkServer.Spawn(go);
}
[Command]
void CmdSetCamera(bool en)
{
if (myPlayerUnit != null)
{
myPlayerUnit.GetComponent<Camera>().enabled = en;
}
}
[Command]
void CmdMove(bool right)
{
if (myPlayerUnit == null)
{
return;
}
if (right)
{
myPlayerUnit.transform.Translate(speed, 0, 0);
}
else
{
myPlayerUnit.transform.Translate(-speed, 0, 0);
}
}
}