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 ...
随机推荐
- [转]Post和Get的区别
作者:zhanglinblog 来源:https://urlify.cn/FnYBbu 这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以 ...
- 关于python中的 take no arguments 的解决方法
针对第四章编写的代码出现的错误做一个总结 Traceback (most recent call last): File "H:\image\chapter4\p81_chongxie.py ...
- javaWeb Maven Runner设置中文乱码
将Runner设置为 -DarchetypeCatal! 使maven在没有网络的情况下在本地查找下载好的插件 配置 -Dfile.encoding=gb2312 防止中文乱码
- java数组输出的三种方式
第一种:foreach语句遍历输出 //通过foreach语句遍历输出数组 int nums[] = new int [4]; for (int num:nums) { System.out.prin ...
- 基于boost的bind与function的一个简单示例消息处理框架
前两年开始接触boost,boost库真是博大精深:今天简单介绍一下boost中之前用到的的bind与function,感觉挺实用的,分享给大家,我对boost用的也不多,让大家见笑了. 上次文发了一 ...
- 学会这些Python美图技巧,就等着女朋友夸你吧
一.前言 Python中有许多用于图像处理的库,像是Pillow,或者是OpenCV.而很多时候感觉学完了这些图像处理模块没有什么用,其实只是你不知道怎么用罢了.今天就给大家带了一些美图技巧,让你的图 ...
- JS 节点笔记
h5新增自定义属性 为了保存并使用数据,有一些数据不必要保存到数据库中: data开头作为自定义属性并赋值 兼容性获取element.getAttribute("da ...
- 详解GaussDB(for MySQL)服务:复制策略与可用性分析
摘要:本文通过介绍GaussDB(for MySQL)读写路径,分析其可用性. 简介 数据持久性和服务可用性是数据库服务的关键特征. 在实践中,通常认为拥有 3 份数据副本,就足以保证持久性. 但是 ...
- 微信小程序多列选择器
wxml <picker mode="multiSelector" bindchange="bindMultiPickerChange2" bindcol ...
- python新添加excel数据
相关库 import os import xlwt from xlrd import open_workbook from xlutils.copy import copy 1.判断是否存在xls文件 ...