新闻资讯
3DCAT实时渲染云平台

让任意设备随时随地访问您的 3D/XR 应用!

3DCAT实时渲染云-新闻中心

使用PUN免费制作Unity多人联网功能

2023-09-19 10:02:02

PUN同步服务

PUN是Photon旗下的一个多人同步服务,已经有十几年的历史,有联网开发经验的程序员应该对它很熟悉,3DCAT实时云渲染小编本次简单介绍一下如何使用PUN2快速搭建出一个多人联网的Unity工程

注册账号和后台

首先需要前往Photon官网注册一个账号,地址:https://www.photonengine.com/zh-cn

注册完毕之后,点击右上角的Dashboard,进入管理页面,然后创建一个新的APP。

注册账号和后台

在弹出的页面中选择 Multiplayer Game,多人游戏,SDK选择PUN。

创建完成后,即可看到刚刚创建的APP,其中有一行 APPID,这个就是Unity工程中用于多人联网的唯一标识。通过这个APPID,客户端将访问到这个刚刚创建的后台服务。

Unity工程中用于多人联网的唯一标识

导入SDK

在UnityAssetStore上搜索Pun2,或直接访问“https://assetstore.unity.com/packages/tools/network/pun-2-free-119922”,将这个SDK导入到自己的项目中。

导入SDK

SDK导入后会弹出弹窗,要求输入APPID,此时将上面获取的APPID填入即可。后续也可以随时前往Assets--> PhotonUnityNetworking--> Resources 文件夹找到PhotonServerSettings文件对配置进行修改。

文件配置修改

编写代码

Unity客户端部分的代码大概分为两个部分:服务器连接和状态同步。

服务器连接

Pun的连接非常简单,只有几行代码,只需要设置用户名、房间名然后进行连接即可,Pun提供了连接回调,连接成功后可以进行自己的逻辑,例如实例化Player的角色。以下是一个简单的示例:

   string UserName, RoomName = "RoomTest";
    void Start()
    {
        UserName = "User_" + Random.Range(1024, 2000);
        PhotonNetwork.NickName = UserName;
    }

    public void Connect()
    {
        PhotonNetwork.ConnectUsingSettings();
    }

    public override void OnConnectedToMaster()
    {
        base.OnConnectedToMaster();
        Debug.Log("连接到服务器");
        PhotonNetwork.JoinOrCreateRoom(RoomName, new Photon.Realtime.RoomOptions() { MaxPlayers = 20 }, default);
    }

    public override void OnJoinedRoom()
    {
        base.OnJoinedRoom();
        //Do your logic
    }

玩家角色同步

连接到服务器之后,如果玩家有实体角色,需要实例化预制体。

对于常规的第一人称/第三人称游戏,应该已经有了一个带有控制、动画、刚体等组件的人物预设。联网同步的重点则是将玩家角色身上的这些数据进行同步。

 玩家人物预设

要实现同步玩家的以上状态,需要给已有的预制体增加以下脚本,分别用于同步玩家动画、刚体以及位置信息。

 给已有的预制体增加脚本

新的预制体制作完成后,可以放在Assets--> PhotonUnityNetworking--> Resources文件夹,然后就可以在连接成功的回调中使用代码进行实例化了。

    public override void OnJoinedRoom()
    {
        base.OnJoinedRoom();
        //Do your logic
        PhotonNetwork.Instantiate("your avator", BornPosition, Quaternion.identity, 0);
    }

本文《使用PUN免费制作Unity多人联网功能》内容由3DCAT实时云渲染解决方案提供商整理发布,如需转载,请注明出处及链接:https://www.3dcat.live/news/post-id-169/

业务咨询:400-8037-298