多人联机——Photon插件的是使用

准备环境:

安装PhotonServer。

PhotonServer教程

安装Photon插件。

Photon插件
然后需要打开Photon的官网注册一个账号

登录以后,点击新建一个APP:
在这里插入图片描述
类型的话,如果是聊天室可以选择Photon Chat,普通的选择Photon PUN就可以了

复制App ID,到Unity项目中的Photon/PhotonUnityNetworking/Resources/PhotonServerSettings的
App Id Realtim

Photon云端服务器不稳定,所以在Server Address填上服务器IP地址

Server Port写5058,

然后就是代码设置:

随便找个场景中的物体挂载这三个脚本,脚本是插件自带的。

ConnectAndJoinRandom 这个脚本自动连接到PhotonServer,尝试加入一个随机的房间,如果没有发现并创建一个。

DemoBoxesGui是运行时在左下角显示连接状态的,并会生成一个ongui按钮,实现断开与连接,可以不挂载。(新版插件已删除)

ShowStatusWhenConnecting 是在登录时在屏幕中间显示连接状态,可以不挂载。(新版插件已删除)

1.新建场景,新建一个Plane,和Cube,将Cube设成预制体,放到Resouces文件夹:
在这里插入图片描述
2.给Cube加上Photon View组件,如果要同步的话,这个组件是必须的
在这里插入图片描述

将Cube的Transform拖入Observed Components

 

观察选项

Observe Option字段让你选择更新如何发送以及何时被发送。该字段还会影响到OnPhotonSerializeView被调用的频率。

Off 顾名思义,关掉。如果该PhotonView被保留为RPCs限定时可以很有用。

Unreliable 更新如是被发送,但可能会丢失。这个想法是,下一次更新很快到来,并提供所需的正确的/绝对的值。这对于位置和其他绝对数据来说是有利的,但对于像切换武器这样触发器来说是不好的。当用于同步的游戏对象的位置,它会总是发送更新,即使该游戏对象停止运动(这是不好的)。

Unreliable on Change 将检查每一个更新的更改。如果所有值与之前发送的一样,该更新将作为可靠的被发送,然后所有者停止发送更新直到事情再次发生变化。这对于那些可能会停止运动的以及暂时不会创建进一步更新的游戏对象来说是有利的。例如那些在找到自己的位置后就不再移动的箱子。

Reliable Delta Compressed 将更新的每个值与它之前的值进行比较。未更改的值将跳过以保持低流量。接收端只需填入先前更新的值。任何你通过OnPhotonSerializeView写入的都会自动进行检查并以这种方式被压缩。如果没有改变, OnPhotonSerializeView不会在接收客户端调用。该“可靠的”部分需要一些开销,所以对于小的更新,应该考虑这些开销。


3.新建脚本ClickFloor,将脚本付给Plane

using Photon.Pun;
using UnityEngine;

public class ClickFloor : MonoBehaviour
{
    public GameObject m_Prefab;

    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {              
                PhotonNetwork.Instantiate(m_Prefab.name, hit.point + new Vector3(0, 3, 0), Quaternion.identity, 0);
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
4.新建脚本PhotonConnect.cs

using UnityEngine;
using Photon.Pun;//导入Photon命名空间
using Photon.Realtime;

public class PhotonConnect : MonoBehaviour
{
    void Start()
    {
        //初始化版本号
        PhotonNetwork.ConnectUsingSettings();
        PhotonNetwork.GameVersion = "1";
    }

    //按钮事件 创建房间
    public void Btn_CreateRoom(string _roomName)
    {

        //设置房间属性
        RoomOptions m_Room = new RoomOptions { IsOpen = true, IsVisible = true, MaxPlayers = 4 };
        PhotonNetwork.CreateRoom(_roomName, m_Room);
    }

    //根据房间名加入房间
    public void Btn_JoinRoom(string _roomName)
    {
        PhotonNetwork.JoinRoom(_roomName);
    }

    //随机加入已经创建的房间
    public void Btn_JoinRandomRoom()
    {
        PhotonNetwork.JoinRandomRoom();
    }

    void OnGUI()
    {
        //显示连接信息
        GUILayout.Label(PhotonNetwork.NetworkClientState.ToString(), GUILayout.Width(300), GUILayout.Height(100));
    }
}

5.将脚本付给Main Camera(任意一个场景中的对象就行),然后新建3个按钮,绑定事件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.Cube预制体Apply一下,然后从场景中删除,运行,运行后看到左上角出现<ConnectedToMasterServer>后,在点击创建房间,就会自动加入创建的房间了,左上角出现<Joined>则表示加入房间成功,然后点击右键就会实例化方块预制体了。
在这里插入图片描述

参考:恬静的小魔龙

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十画_824

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值