PUN☀️三、服务器大厅、服务器房间

简介: PUN☀️三、服务器大厅、服务器房间

🟥 目标

1、点“开始连接”,进入房间

2、将你的用户名发送到PUN,实现同步

类似游戏中能看到其他用户名字

3、点击开始连接,开始连接隐藏,出现正在连接中的字样。


🟧 开发过程

1️⃣ Unity界面

a、界面

完成目标中UI的设置与逻辑。代码自行编写。

b、脚本绑定

实现点击“开始连接”,进入房间。

  • 开始连接按钮,绑定 Launcher 脚本的 Skode_JoinRoom


2️⃣ 用户名同步

告诉PUN你的名字,用于后面进行显示。

  • 下脚本挂载到任意物体上,给该脚本绑定输入框
  • 输入框的OnEndEdit,绑定该脚本动态(Dynamic string)的SetPlayerName方法
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
 
public class PlayerNameInputField : MonoBehaviour
{
    #region  Parameters
 
    public InputField inputField;
 
    const string playerNamePrefKey = "PlayerName";
    string defaultName = string.Empty;
 
    #endregion
 
 
    #region Mono CallBacks
 
    void Start()
    {
        if (inputField != null)
        {
            if (PlayerPrefs.HasKey(playerNamePrefKey))
            {
                defaultName = PlayerPrefs.GetString(playerNamePrefKey);
                inputField.text = defaultName;
            }
        }
 
        PhotonNetwork.NickName = defaultName;
    }
 
    #endregion
 
 
    #region Public Methods
 
    //设置玩家的名字,并将其保存在PlayerPrefs中以备将来使用。
    //在OnEndEdit绑定动态
    public void SetPlayerName(string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            Debug.LogError("输入框应输入玩家名字");
            return;
        }
 
        PhotonNetwork.NickName = value;
 
        PlayerPrefs.SetString(playerNamePrefKey, value);
    }
 
    #endregion
}


3️⃣ 点击开始连接后,开始连接隐藏

注意:在连接服务器失败OnDisconnected() 时,显示开始连接和输入名字:

Launcher最终代码:

using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
 
public class Launcher : MonoBehaviourPunCallbacks
{
    #region  Parameters
 
    [Tooltip("连接服务器失败后要显示的物体")]
    public GameObject[] failedShow;
 
    //此客户端的版本号。用户之间通过gameVersion(允许你做出破坏性的改变)进行隔离。
    string gameVersion = "1";
 
    [SerializeField]
    [Tooltip("最大连接人数")]
    byte maxPlayersPerRoom = 4;
 
    bool isPressPlay = false;
 
    #endregion
 
 
    #region Mono CallBacks
 
    void Awake()
    {
        // 这确保我们可以在主客户端和同一房间的所有客户端上使用photonnet . loadlevel()自动同步它们的级别
        PhotonNetwork.AutomaticallySyncScene = true;
    }
 
    void Start()
    {
        ConnectServer();
    }
 
    #endregion
 
 
    #region Public Method
 
    //绑定到开始连接上:连接到服务器房间
    public void Skode_JoinRoom()
    {
        isPressPlay = true;
 
        //若还未连接服务器,则先连接服务器,再加入房间
        if (!PhotonNetwork.IsConnected)
            ConnectServer();
        else
            LoadRoom();
    }
 
    #endregion
 
 
    #region Private Methods
 
    //连接到服务器
    void ConnectServer()
    {
        // 检查是否连接了服务器
        if (!PhotonNetwork.IsConnected)
        {
            //首先连接到光子在线服务器。
            PhotonNetwork.GameVersion = gameVersion;
            PhotonNetwork.ConnectUsingSettings();
        }
    }
 
    void LoadRoom()
    {
        PhotonNetwork.JoinRandomRoom();
    }
 
    void LoadScene()
    {
        PhotonNetwork.LoadLevel("Room for " + PhotonNetwork.CurrentRoom.PlayerCount);
    }
 
    #endregion
 
 
    #region Pun Callbacks
 
    // 连接服务器成功回调
    public override void OnConnectedToMaster()
    {
        if (isPressPlay)
            LoadRoom();
    }
 
    //连接服务器失败回调
    public override void OnDisconnected(DisconnectCause cause)
    {
        Debug.LogWarningFormat("OnDisconnected() was called by PUN with reason {0}", cause);
 
        for (int i = 0; i < failedShow.Length; i++)
        {
            failedShow[i].SetActive(true);
        }
    }
 
    // 加入房间成功回调
    public override void OnJoinedRoom()
    {
        //主客户端加载场景即可。其他客户端进入房间后,会自动加载主客户端的场景
        if (PhotonNetwork.IsMasterClient)
            LoadScene();
    }
 
    //加入房间失败回调
    public override void OnJoinRandomFailed(short returnCode, string message)
    {
        Debug.Log("we failed to join a random room, maybe none exists or they are all full. No worries, we create a new room.");
 
        //创建房间后,会自动加入房间。从而触发加入房间成功的回调。
        PhotonNetwork.CreateRoom(null, new RoomOptions { MaxPlayers = maxPlayersPerRoom });
    }
 
    #endregion
}


🟨 服务器房间设置

那么,我们来想一下:

  • 我们建好房间了,可想更改房间参数,更改房间最大人数,怎么办呢?
  • 以及更改了,有没有回调啊?
  • 加入随即房间时,能不能自动筛选房间啊?

🚩服务器房间属性

完成服务器房间属性、自定义属性的设置、更改。

相关文章
棋牌游戏服务器如何动态创建房间?
如何动态创建房间? 客户需要这个功能,我们给设计成VIP会员可创建房间,那么涉及这几个功能, 一接受客户端请求,服务器端NEW一个ROOM类,并ADD到RoomList 二设定EMPTY TIME OUT,自动销毁空房间, 三向客户端通知事件,ROOM ADD,ROOM DEL   接下...
|
2月前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
24天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
22天前
|
编解码 前端开发 安全
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
在我们选购阿里云服务器的过程中,不管是新用户还是老用户通常都是通过阿里云的活动去买了,一是价格更加实惠,二是活动中的云服务器配置比较丰富,足可以满足大部分用户的需求,但是面对琳琅满目的云服务器实例、带宽和云盘选项,如何选择更适合自己,成为许多用户比较关注的问题。本文将介绍如何在阿里云的活动中选择合适的云服务器实例、带宽和云盘,以供参考和选择。
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
|
20天前
|
弹性计算 运维 安全
阿里云轻量应用服务器和经济型e实例区别及选择参考
目前在阿里云的活动中,轻量应用服务器2核2G3M带宽价格为82元1年,2核2G3M带宽的经济型e实例云服务器价格99元1年,对于云服务器配置和性能要求不是很高的阿里云用户来说,这两款服务器配置和价格都差不多,阿里云轻量应用服务器和ECS云服务器让用户二选一,很多用户不清楚如何选择,本文来说说轻量应用服务器和经济型e实例的区别及选择参考。
阿里云轻量应用服务器和经济型e实例区别及选择参考
|
21天前
|
机器学习/深度学习 存储 人工智能
阿里云GPU云服务器实例规格gn6v、gn7i、gn6i实例性能及区别和选择参考
阿里云的GPU云服务器产品线在深度学习、科学计算、图形渲染等多个领域展现出强大的计算能力和广泛的应用价值。本文将详细介绍阿里云GPU云服务器中的gn6v、gn7i、gn6i三个实例规格族的性能特点、区别及选择参考,帮助用户根据自身需求选择合适的GPU云服务器实例。
阿里云GPU云服务器实例规格gn6v、gn7i、gn6i实例性能及区别和选择参考
|
14天前
|
弹性计算 人工智能 安全
阿里云推出第九代ECS实例,最高提升30%性能
阿里云推出第九代ECS实例,最高提升30%性能
119 14
|
1月前
|
存储 弹性计算 运维
阿里云日常运维-购买服务器
这篇文章是关于如何在阿里云购买和配置云服务器ECS的教程。
60 6
阿里云日常运维-购买服务器
|
23天前
|
弹性计算
阿里云美国服务器需要备案吗?必看!
阿里云美国服务器无需ICP备案,适用于希望避开备案流程的用户。不同于中国大陆地区服务器,美国服务器及中国香港服务器均无需备案。用户可直接解析域名使用。阿里云提供美国云服务器ECS与轻量应用服务器两种选择,分别满足不同需求
82 9
|
15天前
|
人工智能 运维 Cloud Native
专访阿里云:AI 时代服务器操作系统洗牌在即,生态合作重构未来
AI智算时代,服务器操作系统面临的挑战与机遇有哪些?
专访阿里云:AI 时代服务器操作系统洗牌在即,生态合作重构未来
下一篇
无影云桌面