Я хочу сделать следующее.
Когда игрок присоединяется к комнате, он должен получить все объекты игровых объектов (с фотонов).
Это должно произойти только один раз, когда игрок входит в комнату. Как это можно реализовать?Как синхронизировать позицию только один раз, используя Photon Networking
ответ
Лучшим решением для отправки только одной информации является использование системы сообщений 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
}
}
является то, что имеет смысл?
Вы не объяснили, как я могу отправить rpc только новому клиенту, который только что присоединился к комнате, и вы не объяснили, как другие клиенты знают, когда и какой новый игрок присоединился к комнате. – yuval
Взгляните на отредактированную версию. –
Да, это имеет смысл, но для простоты я думаю, что я должен использовать 'OnPhotonPlayerConnected'. Это то же самое, что короче и без создания класса Singleton. – yuval
- 1. Photon Networking - Getroomlist()
- 2. Unity 3d Photon Networking
- 3. Photon Unity Networking
- 4. Когда использовать главный клиент Photon Networking?
- 5. Unity Photon Multiplayer Networking Turnbased
- 6. Photon Unity Networking Нежелательная кросс-сценаментация
- 7. Unity and Photon Networking - Ждите других игроков
- 8. Как получить позицию всего игрока в Photon
- 9. Photon Unity Networking (PUN) пытается отслеживать игроков в каждой команде
- 10. 2 UIBarButtonItem, используя только добавляемые один раз
- 11. ImageView вращается только один раз, используя AccelerateDecelerateInterpolator
- 12. Копирование данных объекта между клиентами с помощью Photon Unity Networking
- 13. Найти позицию значения, которая встречается только один раз в dataframe
- 14. Получение WatchPosition только один раз
- 15. JQuery только один раз выполняется один раз
- 16. Как синхронизировать изменения спрайтов (SpriteRenderer) в Photon Unity?
- 17. ObjectAnimator только эффект один раз
- 18. Как split_regex только один раз?
- 19. Как рисоватьString() только один раз
- 20. Как работать только один раз?
- 21. interstitialWillDismissScreen только вызывается один раз
- 22. Как вызвать класс UL только один раз, используя domdocument php
- 23. Java Timer только один раз один раз (только для сервера)
- 24. нагрузки только один раз
- 25. Создавать только один раз?
- 26. Инициализация только один раз
- 27. Переадресация только один раз
- 28. Петля только один раз
- 29. Как принудительно синхронизировать значение поля между ступеньками один раз?
- 30. Javascript только один раз
Я использовал OnPhotonSerializeView, чтобы отправить позицию всех игровых объектов с определенным значением передачи. Но это довольно неэффективно, потому что я хотел бы только отправлять позиции один раз, когда кто-то присоединяется к комнате. – yuval