Я делаю 2D-игру, проблема в том, что когда первый игрок создает и появляется в комнате, его камера работает нормально, но когда новый игрок входит в комнату, первый игрок видит все через камеру второго игрока.Кроме того, если подключается третий игрок, первый и второй игроки видят все через камеру третьего игрока и т. Д.
Префаб игрока, созданный в классе GameManager, который находится только на игровой сцене
public class GameManager : MonoBehaviourPunCallbacks
{
public GameObject playerPrefab;
public Transform spawnPoint;
public void Start()
{
GameObject player = PhotonNetwork.Instantiate(this.playerPrefab.name, spawnPoint.position, Quaternion.identity);
player.GetComponent<FireFighterHeroController>().enabled = true;
player.GetComponent<CameraControler>().enabled = true;
player.GetComponent<CameraControler>().SetTarget(player.transform);
}
#region PUN Callbacks
public override void OnLeftRoom()
{
SceneManager.LoadScene(1);
}
#endregion
#region Custom Methods
public void OnClickLeaveRoom_Btn()
{
PhotonNetwork.LeaveRoom();
}
#endregion
}
Простой контроллер камеры
public class CameraControler : MonoBehaviour
{
private Transform target;
public GameObject camera;
public Vector3 offset;
public void SetTarget(Transform target)
{
this.target = target;
}
public void LateUpdate()
{
camera.transform.position = target.position + offset;
}
}
UPD Нашел решение
Я переместил скрипт контроллера камеры на камеру игрока, и в экземпляре игрока янайдите эту камеру, включите ее и перенесите в нее преобразование игрока.
Не уверен насчет этого метода, но он хотя бы работает.
Вот этот монстр
public class GameManager : MonoBehaviourPunCallbacks
{
public Transform spawnPoint;
public void Start()
{
GameObject player = PhotonNetwork.Instantiate("Player", spawnPoint.position, Quaternion.identity);
if (!player.GetPhotonView().IsMine)
return;
player.GetComponent<FireFighterHeroController>().enabled = true;
player.transform.Find("Camera").gameObject.GetComponent<CameraControler>().enabled = true;
player.transform.Find("Camera").gameObject.GetComponent<CameraControler>().SetTarget(player.transform);
player.transform.Find("Camera").gameObject.SetActive(true);
}
}
и контроллер камеры
public class CameraControler : MonoBehaviour
{
private Transform target;
public Vector3 offset;
public void SetTarget(Transform target)
{
this.target = target;
}
public void LateUpdate()
{
gameObject.transform.position = target.position + offset;
}
}