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   接下...
|
29天前
|
存储 缓存 数据挖掘
阿里云目前最便宜云服务器介绍:38元、99元、199元性能,选购攻略参考
轻量应用服务器2核2G峰值200M带宽38元1年;云服务器经济型e实例2核2G3M带宽99元1年;云服务器通用算力型u1实例2核4G5M带宽199元1年。对于还未使用过阿里云服务器的用户来说,大家也不免有些疑虑,这些云服务器性能究竟如何?它们适用于哪些场景?能否满足自己的使用需求呢?接下来,本文将为您全方位介绍这几款云服务器,以供您了解及选择参考。
|
2月前
|
网络安全 云计算
如何设置阿里云轻量应用服务器镜像?
本文介绍了在阿里云轻量应用服务器上创建与配置镜像的详细步骤。镜像是一种特殊的文件系统映射,可用于快速克隆服务器配置。内容涵盖准备条件、登录控制台、创建实例、生成镜像、下载与设置镜像,以及如何使用镜像启动新实例。适合希望提升服务器部署效率的用户参考。
|
2月前
|
存储 弹性计算 安全
阿里云轻量服务器通用型、CPU优化型、多公网IP型、国际型、容量型不同实例区别与选择参考
阿里云轻量应用服务器实例类型分为通用型、CPU优化型、多公网IP型、国际型、容量型,不同规格族的适用场景和特点不同,收费标准也不一样。本文为大家介绍轻量应用服务器通用型、多公网IP型、容量型有何区别?以及选择参考。
|
14天前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
64 0
|
2月前
|
弹性计算 编解码 大数据
性价比最高提升50%!阿里云企业级云服务器上新
阿里云ECS云服务器推出全新升级的u2系列实例,包括基于Intel的u2i实例与首个基于AMD的u2a实例,提供企业级独享算力,综合性价比最高提升50%。u2i实例已开放公测,适用于中小型数据库、企业网站建设等场景。同时发布基于AMD的第九代旗舰实例g9ae,性能提升65%,适用于大数据、视频转码等密集型业务。
211 0
|
21天前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
28天前
|
存储 弹性计算 固态存储
阿里云云服务器配置攻略
选择云服务器需结合业务需求、访问量、ECS实例规格、存储类型与带宽等因素。个人用户可选轻量服务器,企业应用需更高配置,如通用型或内存型实例。带宽根据流量选择,支持按固定或使用量计费。存储方面,系统盘可选小容量,数据盘按需配置,I/O敏感业务建议SSD或ESSD云盘。
|
2月前
|
域名解析 运维 监控
阿里云轻量服务器的系统镜像和应用镜像的区别
轻量应用服务器是阿里云推出的易用型云服务器,支持一键部署、域名解析、安全管理和运维监控。本文介绍其系统镜像与应用镜像的区别及选择建议,助您根据业务需求和技术能力快速决策,实现高效部署。

热门文章

最新文章