2016-08-09 2 views
0

Я хочу сделать следующее.
Когда игрок присоединяется к комнате, он должен получить все объекты игровых объектов (с фотонов).
Это должно произойти только один раз, когда игрок входит в комнату. Как это можно реализовать?Как синхронизировать позицию только один раз, используя Photon Networking

+0

Я использовал OnPhotonSerializeView, чтобы отправить позицию всех игровых объектов с определенным значением передачи. Но это довольно неэффективно, потому что я хотел бы только отправлять позиции один раз, когда кто-то присоединяется к комнате. – yuval

ответ

1

Лучшим решением для отправки только одной информации является использование системы сообщений RPC.

[PunRPC] 
void changePos(int x, int y, int z) 
{ 
    Debug.Log("new pos =" + x + "," + y + ","+z); 
} 

PhotonView photonView = PhotonView.Get(this); 
photonView.RPC("changePos", PhotonTargets.All, 1,1,1); 

Вы можете прочитать больше о RPC сообщений здесь: https://doc.photonengine.com/en/pun/current/tutorials/rpcsandraiseevent

EDIT:

Я предполагаю, что вы подключаетесь через:

 PhotonNetwork.JoinRoom(this.roomName); 

Таким образом, в месте resposible для подключение к серверу, который вы можете использовать:

public void OnCreatedRoom() 
{ 
    Debug.Log("OnCreatedRoom"); 
} 

public void OnJoinedRoom() 
{ 
    Debug.Log("OnJoinedRoom"); 
    RPCserver.Instance.AddNewPlayer(login)  
} 

И потом, вы можете иметь мост для хранения всех RPC включены методы:

public class RPCserver : Singleton 
{ 
    public List<Player> players = new List<Player>(); 

    public void addNewPlayer(string name) 
    { 
      Player p = new Player(name); 
      players.Add(p); 

      if(p.isNewPlayer()) fetchOtherObjectsPositions(); 
    } 

    private void fetchOtherObjectsPositions(){ 
     // Go through all neccesery objects, and send their position via RPCserver 
    } 
} 

является то, что имеет смысл?

+0

Вы не объяснили, как я могу отправить rpc только новому клиенту, который только что присоединился к комнате, и вы не объяснили, как другие клиенты знают, когда и какой новый игрок присоединился к комнате. – yuval

+0

Взгляните на отредактированную версию. –

+0

Да, это имеет смысл, но для простоты я думаю, что я должен использовать 'OnPhotonPlayerConnected'. Это то же самое, что короче и без создания класса Singleton. – yuval

Смежные вопросы