Photon PUN 二 大厅 & 房间
一, 简介
玩过 LOL , dota2, 王者荣耀 等MOBA类的游戏,就很容易理解大厅和房间了.
LOL中一个服务器就相当与一个大厅; 什么电一,电二 ,,, 联通一区等 每一个区就相当于一个大厅.
而开始游戏创建一个自定义游戏的时候 , 就是创建了一个房间 对应 PhotonNetwork.CreateRoom() 函数 .
LOL普通匹配就像是一个有对应匹配算法的 PhotonNetwork.JoinRandom() .
二, 使用
① 连接到服务器
服务器的地址在这里设置

勾选Auto-Join Lobby 后程序就会自动加入到房间 , 不需要再在代码中实现加入大厅
在适当的地方调用 PhotonNetwork.ConnectUsingSettings(string _GameVersion) ; 即可连接到大厅.
连接大厅成功与失败对应两个函数
首先脚本需要继承自 Photon.PunBehaviour
public class Launcher : Photon.PunBehaviour
{ /// <summary>
/// 成功连接到大厅
/// </summary>
public override void OnConnectedToPhoton()
{ } /// <summary>
/// 连接大厅失败
/// </summary>
/// <param name="error"></param>
private void OnFailedToConnect(NetworkConnectionError error)
{
Debug.Log("fail to Connect");
}
}
② 监控房间列表
重写 Photon.PunBehaviour.OnReceivedRoomListUpdate() ;
public override void OnReceivedRoomListUpdate(){
}
③ 设置玩家昵称 PhotonNetwork.playerName = "PlayerName";
④ 创建房间 PhotonNetwork.CreateRoom("roomName", new RoomOptions() { MaxPlayers = MaxPlayersPerRoom },(TypedLobby)null );
第一个参数是房间名, 第二个参数房间参数, 第三个参数 房间所在的大厅 默认大厅是null
⑤ 加入房间
/// <param name="roomName">独一无二的房间名</param>
/// <param name="expectedUsers">玩家在房间中的顺序</param>
/// <returns>加入是否成功</returns>
public static bool JoinRoom(string roomName, string[] expectedUsers)
三. 完整代码
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI; namespace com.Lobby
{
public class Launcher : Photon.PunBehaviour
{
#region PUBLIC //客户端版本
public string _gameVersion = "1.0"; //玩家名字
public InputField nameField; //房间列表
public RectTransform LobbyPanel; #endregion #region PRIVATE private bool isConnecting;
#endregion private void Awake()
{
//#不重要
//强制Log等级为全部
PhotonNetwork.logLevel = PhotonLogLevel.Full; //#关键
//我们不加入大厅 这里不需要得到房间列表所以不用加入大厅去
PhotonNetwork.autoJoinLobby = true; //#关键
//这里保证所有主机上调用 PhotonNetwork.LoadLevel() 的时候主机和客户端能同时进入新的场景
PhotonNetwork.automaticallySyncScene = true;
} // Use this for initialization
void Start()
{
Connect(); SetPlayerName();
} /// <summary>
/// 连接到大厅
/// </summary>
private void Connect()
{
isConnecting = true; //已經連接上了服務器
if (PhotonNetwork.connected)
{
Debug.Log("Connected");
}
else
{
PhotonNetwork.ConnectUsingSettings(_gameVersion);
}
}
/// <summary>
/// 成功连接到大厅
/// </summary>
public override void OnConnectedToPhoton()
{
base.OnConnectedToPhoton();
} /// <summary>
/// 连接大厅失败
/// </summary>
/// <param name="error"></param>
private void OnFailedToConnect(NetworkConnectionError error)
{
Debug.Log("fail to Connect");
} public void CreateARoom()
{
if (PhotonNetwork.connected)
{
//创建房间成功
if (PhotonNetwork.CreateRoom(nameField.text, new RoomOptions { MaxPlayers = }, null))
{
Debug.Log("Launcher.CreateARoom 成功");
PhotonNetwork.LoadLevel("Room");
}
}
} public override void OnPhotonCreateRoomFailed(object[] codeAndMsg)
{
Debug.Log("Launcher Create Room faileds");
} public void PlayerNameChanged()
{
if (string.IsNullOrEmpty(nameField.text))
{
PlayerPrefs.SetString("PlayerName", "default");
}
else
{
SetPlayerName();
}
} public void SetPlayerName()
{
if (string.IsNullOrEmpty(nameField.text))
{
if (PlayerPrefs.HasKey("PlayerName"))
{
nameField.text = PlayerPrefs.GetString("PlayerName");
}
} PhotonNetwork.playerName = nameField.text;
PlayerPrefs.SetString("PlayerName", nameField.text);
} public override void OnReceivedRoomListUpdate()
{ Debug.Log("OnReceivedRoomListUpdate"); RoomInLobby[] ts = LobbyPanel.GetComponentsInChildren<RoomInLobby>();
foreach (RoomInLobby t in ts)
{
Destroy(t.gameObject);
} RoomInfo[] rooms = PhotonNetwork.GetRoomList();
foreach (RoomInfo room in rooms)
{
GameObject g = GameObject.Instantiate(Resources.Load("Lobby/RoomItem") as GameObject);
Text t = g.transform.Find("Text").GetComponent<Text>();
t.text = room.Name;
g.name = room.Name;
g.transform.SetParent(LobbyPanel);
g.transform.localScale = Vector3.one;
}
}
}
}
这里有整个工程的代码 https://github.com/Luckeee/mahjong
Photon PUN 二 大厅 & 房间的更多相关文章
- Photon PUN 三 RPCs & RaiseEvent
官方文档地址 https://doc.photonengine.com/en-us/pun/current/manuals-and-demos/rpcsandraiseevent 一, RPC P ...
- Photon PUN 一 介绍
有句话说的好 , 官网永远是最好的学习地方 . 虽然国内的资料不多 , 但是官网的资料还是很充足 , 这就带着英汉词典就着作阅读理解的劲头去官网学习吧 https://doc.photonengine ...
- Unity - Photon PUN 本地与网络同步的逻辑分离 (二)
上篇实现了事件系统的设计,这篇就来结合发送RPC消息 并且不用标记 [PunRPC] 先来看下上编的代码 GameEnvent.cs private static Dictionary<Comm ...
- Unity - Photon PUN 本地与网络同步的逻辑分离 (一)
服务器大家可以使用Photon官网提供的,这样会变得很简单,直接搭建下就好.或者下载到本地开启本地端Photon服务器 (大家也可以使用和我一样方式有时间做了个winform 程序用来管理本地服务器开 ...
- 使用Photon引擎进行unity网络游戏开发(三)——网络游戏大厅及房间
使用Photon引擎进行unity网络游戏开发(三)--网络游戏大厅及房间 Photon PUN Unity 网络游戏开发 连接到Photon ConnectUsingSettings 设置你的客户端 ...
- 使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍
使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍 Photon PUN Unity 网络游戏开发 Photon常用类介绍: IPunCallback PUNGIPunCa ...
- 使用Photon引擎进行unity网络游戏开发(四)——Photon引擎实现网络游戏逻辑
使用Photon引擎进行unity网络游戏开发(四)--Photon引擎实现网络游戏逻辑 Photon PUN Unity 网络游戏开发 网络游戏逻辑处理与MasterClient 网络游戏逻辑处理: ...
- 使用Photon引擎进行unity网络游戏开发(一)——Photon引擎简介
使用Photon引擎进行unity网络游戏开发(一)--Photon引擎简介 Photon PUN Unity 网络游戏开发 Photon引擎简介: 1. 服务器引擎: 服 务 器 引 擎 介 绍 服 ...
- Unity3d客户端与Photon服务器数据通信
今天先介绍一下Photon服务器是什么,可以做什么,为什么要使用它? Photon:开发多人联网游戏最轻松的方案!可以迅速简单实现多人实时在线网络游戏(pvp). Photon:透过位于各地的Phot ...
随机推荐
- vmware15虚拟机安装教程
自己碰到的问题:本人win7 64位旗舰版系统.之前用VMware12pro版本的软件,在安装Ubuntu18.04之后,有时候开启Ubuntu虚拟机时有点问题,重启就可以了.但是不稳定,所以改用VM ...
- Angular 10材质的模态弹出示例和教程
在本教程中,我们将通过示例使用Angular 10材质构建模式弹出窗口. 在这里,我们将研究创建Angular 10项目,安装和设置Angular 10材质,以及创建自定义材质模块文件. 在本教程中, ...
- jar包冲突解决
背景: 新需求需要引入新jar包,引入后发现本地启动没有报错,发到测试环境提示某个bean无法创建,nested exception is java.lang.VerifyError: Bad typ ...
- 020_go语言中的接口
代码演示 package main import ( "fmt" "math" ) type geometry interface { area() float ...
- python爬取高匿代理IP(再也不用担心会进小黑屋了)
为什么要用代理IP 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人 ...
- LinuX操作系统基础------>软件的安装方式,chmod权限,vi编辑器的使用
RPM包管理 -rpm命令管理 RPM包管理 -yum在线管理 文件权限管理 vi编辑器的使用和常用的快捷键 1.RPM包管理: 一种用于互联网下载包的打包及安装工具,RPM包管理分为rpm命令管理和 ...
- day25:魔术方法
目录 1.__del__(析构方法) 2.魔术方法:__str__ 3.魔术方法:__repr__ 4.魔术方法:__call__ 5.魔术方法:__bool__ 6.魔术方法:__add__& ...
- springboot中redis的缓存穿透问题
什么是缓存穿透问题?? 我们使用redis是为了减少数据库的压力,让尽量多的请求去承压能力比较大的redis,而不是数据库.但是高并发条件下,可能会在redis还没有缓存的时候,大量的请求同时进入,导 ...
- 冷饭新炒:理解Snowflake算法的实现原理
前提 Snowflake(雪花)是Twitter开源的高性能ID生成算法(服务). 上图是Snowflake的Github仓库,master分支中的REAEMDE文件中提示:初始版本于2010年发布, ...
- docker,容器,编排,和基于容器的系统设计模式
目录 从容器说起 背景 docker实现原理 编排之争 基于容器的分布式系统设计之道 单节点协作模式 Sidecar pattern(边车模式) Ambassador pattern(外交官模式) A ...