使用 Unity Photon 将玩家位置发送给另一个玩家以在多人游戏中移动他

Send player position to another player to move him in multi player game using Unity Photon

我是按照PUN基础教程的步骤来的。 现在我达到了我想要的一部分将我在当前时间的位置发送给另一个和我在房间里的玩家以移动他。我可以在每次更新时打印我的位置,我需要的是知道如何将位置发送给另一个玩家以移动他。 假设我有一个桌面播放器,当我移动他时,这个翻译移动了移动播放器。 以及我如何停止在移动设备上实例化对象,我只想处理桌面上的实例化对象。 我正在使用 unity 和 Photon Network SDK。

这是我使用的代码

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

建立多人游戏环境的其他class:

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

PUN 自更新以来有一些新组件。 我建议您使用这些组件,因为它对新用户非常友好。

您可以使用的一些组件:

  • PhotonTransformView
  • PhotonRigidbodyView
  • PhotonAnimatorView

这三个组件将帮助您在它所附加的 GameObject 上同步您的位置、物理和动画。

如果您不想使用这些组件,我建议您搜索:Unity PUN 的插值和外推。

一些不错的入门教程:

希望对您有所帮助。

-门诺

我在PUN插件提供的Demo Synchronization中找到了答案,真的很有帮助。