2016-10-30 10 views
1

Ich befolge die Schritte von PUN basic tutorial. Für jetzt erreiche ich einen Teil von dem, was ich will Sende meine Position in der aktuellen Zeit an einen anderen Spieler mit mir in den Raum, um ihn zu bewegen. Ich kann meine Position jedes Mal drucken, wenn ich es aktualisiere, was ich brauche, ist zu wissen, wie ich Position an einen anderen Spieler senden kann, um ihn zu bewegen. Angenommen, ich habe einen Desktop-Player und wenn ich ihn bewege, verschiebe ich den Player auf dem Handy. Und wie höre ich auf Objekt instanziieren Objekt, ich möchte nur mit dem instanziierten Objekt auf dem Desktop beschäftigen. Ich verwende Unity und Photon Network SDK. HierSendet die Spielerposition an einen anderen Spieler, um ihn im Multiplayer-Spiel mit Unity Photon zu bewegen.

ist der Code, den ich verwendet

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 
    } 
}

Die andere Klasse von Multiplayer-Umgebung einzurichten:

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); 
    } 
}

Antwort

2

PUN hat einige neue Komponenten, da ihr neues Update. Ich würde Ihnen empfehlen, diese Komponenten zu verwenden, weil es wirklich benutzerfreundlich für neue Benutzer ist.

Einige Komponenten, die Sie verwenden können:

  • PhotonTransformView
  • PhotonRigidbodyView
  • PhotonAnimatorView

Diese drei Komponenten der Synchronisierung wird helfen, Ihre Position, Physik und Animationen auf der Gameobject es angebracht ist, zu.

Wenn Sie diese Komponenten nicht verwenden möchten, empfehle ich Ihnen, nach oben zu suchen: Interpolation und Extrapolation für Unity PUN.

Einige gute Ausgangs Tutorials:

  • SkyArena PUN Tutorial Dies ist ein wirklich gutes Video-Tutorial [in Teilen] auf PUN, so dass Sie auf jeden Fall, dass out überprüfen sollten.
  • Exit Games Marco Polo Dieses Tutorial wird von jemandem von PUN auch wirklich gut zu lesen, auch wenn Sie es nicht brauchen.

Hoffe, das wird Ihnen helfen.

-Menno

+0

Danke, das ist hilfreich. –

1

fand ich die Antwort in Demo-Synchronisierung, die in PUN-Plugin zur Verfügung gestellt, ist es wirklich hilfreich ist.

+0

Das YouTube-Video von den Entwicklern von SkyArena hat eine gute Erklärung für die Synchronisation, es ist dem Demo-Sync vom PUN-Plugin sehr ähnlich. Also ich schlage vor, einige dieser Videos zu überprüfen. – Mennolp

Verwandte Themen