C# Unity Photon проблема спавна
Когда игрок входит на сервер работает следуйшый код, когда входит первый игрок все нормально, когда входит второй спавнится* 3 player(Clone);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using Photon.Pun;
using Photon.Realtime;
using System.IO;
public class gameManag : MonoBehaviourPunCallbacks
{
// public Text chat;
public GameObject PlayerPf;
public GameObject CameraPf;
public Managmant NAME;
private PhotonView play;
private Vector3[] spawn = new []{new Vector3(0f,19f,65f),new Vector3(80f,19f,65f),new Vector3(80f,-24f,65f),new Vector3(0f,-24f,65f)};
private void Start()
{
PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs","player"),spawn[UnityEngine.Random.Range(0,3)],Quaternion.identity);
// GameObject.Find("player(Clone)").name = PhotonNetwork.NickName;
// PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs","Cam"),new Vector3(GameObject.Find(PhotonNetwork.NickName).transform.position.x,GameObject.Find(PhotonNetwork.NickName).transform.position.y,-30f),Quaternion.identity);
// GameObject.Find("Cam(Clone)").name = PhotonNetwork.NickName+"cam";
}
public override void OnPlayerEnteredRoom(Player newPl)
{
// PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs","player"),spawn[Random.Range(0,3)],Quaternion.identity);
// GameObject.Find("player(Clone)").name = PhotonNetwork.NickName;
// PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs","Cam"),new Vector3(GameObject.Find(PhotonNetwork.NickName).transform.position.x,GameObject.Find(PhotonNetwork.NickName).transform.position.y,-30f),Quaternion.identity);
// GameObject.Find("Cam(Clone)").name = PhotonNetwork.NickName+"cam";
}
}
Ответы (1 шт):
Автор решения: ssa112112
→ Ссылка
Ваш скрипт gameManag выполняется на всех инстансах игры. В момент когда заходит 2-ой игрок выполняются OnPlayerEnteredRoom у первого игрока; Start и OnPlayerEnteredRoom у второго игрока. Что бы с этим справится есть несколько вариантов
- Удалить
OnPlayerEnteredRoomи писать классgameManagс расчетом что он будет выполняться у всех игроков
или, предпочтительнее
- Делать проверку в классе
gameManagIsMasterClient, например
private void Start()
{
Spawn();
}
private override void OnPlayerEnteredRoom(Player newPl)
{
Spawn();
}
private void Spawn()
{
if (!PhotonNetwork.IsMasterClient) return;
PhotonNetwork.Instantiate(Path.Combine("PhotonPrefabs","player"), spawn[UnityEngine.Random.Range(0,3)], Quaternion.identity);
}
- В принципе, ещё можно использовать обычный
Instantiate, а неPthoton
PS: обратите также внимание, что в вашем случаи игроки могут заспауниться в одном и том же месте.
PPS: вот чертовки классный русскоязычный туториал по Photon https://www.youtube.com/watch?v=aqxzrk-pl-8