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

本文关键字:玩家 位置 另一个 移动 Photon 游戏 Unity | 更新日期: 2023-09-27 18:15:30

我遵循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);
    }
}

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

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

一些组件可以使用:

  • PhotonTransformView
  • PhotonRigidbodyView
  • PhotonAnimatorView

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

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

一些很好的入门教程:

  • SkyArena PUN教程这是一个非常好的视频教程,所以你一定要看看。
  • Exit Games Marco Polo这个教程是由PUN的人创建的,即使你不需要它也很好读。

希望这对你有帮助。

menno

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