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   接下...
|
4天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
5天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。
|
7天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
25天前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
45 6
|
1天前
|
机器学习/深度学习 人工智能 编解码
阿里云GPU云服务器优惠收费标准,GPU服务器优缺点与适用场景详解
随着人工智能、大数据分析和高性能计算的发展,对计算资源的需求不断增加。GPU凭借强大的并行计算能力和高效的浮点运算性能,逐渐成为处理复杂计算任务的首选工具。阿里云提供了从入门级到旗舰级的多种GPU服务器,涵盖GN5、GN6、GN7、GN8和GN9系列,分别适用于图形渲染、视频编码、深度学习推理、训练和高性能计算等场景。本文详细介绍各系列的规格、价格和适用场景,帮助用户根据实际需求选择最合适的GPU实例。
|
3天前
|
弹性计算 Linux 数据安全/隐私保护
阿里云上快速搭建幻兽帕鲁游戏联机服务器指南
对于热爱幻兽帕鲁游戏的玩家来说,搭建一台专属的联机服务器无疑能够大大提升游戏体验。阿里云作为领先的云计算服务商,为玩家提供了便捷、高效的服务器搭建方案。本文将为您详细介绍如何在阿里云上快速搭建幻兽帕鲁游戏联机服务器,让您轻松享受多人游戏的乐趣。
|
1月前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
1月前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
104 6
|
1月前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
下一篇
DataWorks