2016-10-30 8 views
1

Я следую инструкциям основного урока PUN. На данный момент я добираюсь до части того, что хочу Отправьте свою позицию в текущее время другому игроку со мной в комнату, чтобы переместить его. Я могу печатать свою позицию каждый раз, когда я ее обновляю, мне нужно знать, как я могу отправить позицию другому игроку, чтобы переместить его. Предположим, у меня есть рабочий стол, и когда я перемещаю его, этот перевод перемещается на мобильном устройстве. И как остановить экземпляр объекта на мобильном телефоне, я просто хочу иметь дело с экземпляром объекта на рабочем столе. Я использую единство и SDK Photon Network.Отправьте позицию игрока другому игроку, чтобы переместить его в многопользовательскую игру, используя Unity Photon

Вот код, который я использовал

using UnityEngine; 
using System.Collections; 

public class NetworkCharacter : Photon.PunBehaviour { 

    private Vector3 correctPlayerPos; 

    void Update() 
    { 
     if (!photonView.isMine) 
      transform.position = Vector3.Lerp(transform.position, this.correctPlayerPos, Time.deltaTime * 5); 

     photonView.RPC ("PrintPosition", PhotonTargets.All, transform.position); 
    } 

    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) 
    { 
     if (stream.isWriting) 
     { 
      // We own this player: send the others our data 
      stream.SendNext(transform.position); 
     } 
     else 
     { 
      // Network player, receive data 
      this.correctPlayerPos = (Vector3)stream.ReceiveNext(); 
     } 
    } 

    [PunRPC] 
    void PrintPosition(Vector3 pos) 
    { 
     Debug.Log (pos); 
     //I need to send position coordinates to the other device 
    } 
}

Другой класс создать многопользовательскую среду:

using UnityEngine; 
using System.Collections; 

public class NetworkManager : Photon.PunBehaviour { 

    // Use this for initialization 
    void Start() { 
     PhotonNetwork.ConnectUsingSettings ("0.1"); 
     //PhotonNetwork.logLevel = PhotonLogLevel.Full; 
    } 

    void Update() { 

    } 

    void OnGUI() 
    { 
     GUILayout.Label(PhotonNetwork.connectionStateDetailed.ToString()); 
    } 

    public override void OnJoinedLobby() 
    { 
     Debug.Log("join lobby!"); 
     PhotonNetwork.JoinRandomRoom(); 
    } 

    void OnPhotonRandomJoinFailed() 
    { 
     Debug.Log("Can't join random room!"); 
     PhotonNetwork.CreateRoom(null); 
    } 

    void OnJoinedRoom() 
    { 
     Debug.Log("join random room!"); 
     GameObject monster = PhotonNetwork.Instantiate("monsterprefab", Vector3.zero, Quaternion.identity, 0); 
    } 
}

ответ

2

PUN имеет некоторые новые компоненты, так как их новое обновление. Я бы рекомендовал вам использовать эти компоненты, потому что он действительно удобен для пользователей.

Некоторые компоненты, которые вы могли бы использовать:

  • PhotonTransformView
  • PhotonRigidbodyView
  • PhotonAnimatorView

Эти три компонента поможет вам синхронизировать позиции, физики и анимации на GameObject он прикреплен к.

Если вы не хотите использовать эти компоненты, я предлагаю вам выполнить поиск: интерполяция и экстраполяция для Unity PUN.

Некоторые хорошие стартовые учебники:

  • SkyArena PUN Tutorial Это очень хороший видео-учебник [по частям] на ПУН, так что вы обязательно должны проверить это.
  • Exit Games Marco Polo Этот учебник создан кем-то из PUN, который действительно хорош для чтения, даже если он вам не нужен.

Надеюсь, это поможет вам.

-Menno

+0

Спасибо, это полезно. –

1

Я нашел ответ в синхронизации демонстрационном, что предусмотрено в PUN плагин, это действительно полезно.

+0

В видеоролике youtube от разработчиков SkyArena есть хорошее объяснение синхронизации, она действительно похожа на демо-синхронизацию из плагина PUN. Так что я предлагаю проверить некоторые из этих видео. – Mennolp