使用Unity Photon将玩家位置发送给其他玩家,让他在多人游戏中移动

时间:2016-10-30 15:53:48

标签: c# unity3d 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
    }
}

另一类建立多人游戏环境:

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 个答案:

答案 0 :(得分:2)

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

您可以使用的一些组件:

  • PhotonTransformView
  • PhotonRigidbodyView
  • PhotonAnimatorView

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

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

一些很好的入门教程:

  • SkyArena PUN Tutorial这是一个非常好的视频教程[部分]在PUN上,所以你一定要检查出来。
  • Exit Games Marco Polo本教程由PUN的某人创建,即使您不需要,也非常适合阅读。

希望这会对你有所帮助。

-Menno

答案 1 :(得分:1)

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