Photon游戏通用服务器
作者:追风剑情 发布于:2019-4-25 16:42 分类:Unity3d
Photon SDK https://www.photonengine.com/zh-CN/PUN
Photon Server https://vibrantlink.com/
光子资源下载
https://vibrantlink.com/resource-links/
如何在PUN中设置中国区域
光子云与光子服务器差异
三类服务器
Master Server
此服务器是进行配对的地方,客户端可以在这里获得大厅中的房间列表。
Game Server
此服务器负责管理多个房间,以及处理房间中玩家的消息同步。
Name Server
此服务器用于获取特定区域的主服务器地址(IP)。
Photon Cloud后台管理
https://dashboard.photonengine.com
一、PhotonView
这是实现GameObject位置、旋转、缩放同步的关键类,需要挂在需要同步的GameObject上。PhotonView会在它的Awake()方法中注册自己PhotonNetwork.RegisterPhotonView(this);
二、消息驱动
PhotonNetwork类的静态构造方法中创建了一个隐藏的挂有PhotonHandler组件的GameObject,利用PhotonHandler组件的LateUpdate()方法实现消息驱动。
internal class PhotonHandler { // line 127 protected void LateUpdate() { // line 132 // 驱动所有的PhotonView执行序列化 PhotonNetwork.RunViewUpdate(); //... } }
三、序列化与数据同步
拖到Observed Components下的组件会被序列化,并进行数据同步。这些组件必须实现IPunObservable接口。
参见PhotonView类中的下面两个方法:
public void SerializeView(PhotonStream stream, PhotonMessageInfo info)
public void DeserializeView(PhotonStream stream, PhotonMessageInfo info)
Controlled locally: (master) = true(代表玩家自己),对应PhotonView的IsMine属性。
PhotonNetwork.IsMasterClient: 判断是否为主客户端
photonView.ViewID: 物体在房间里的唯一ID
当ViewID<PhotonNetwork.MAX_VIEW_IDS时,认为是场景对象,可通过CreatorActorNr==0或者IsSceneView属性判断。
photonView.OwnerActorNr: 对应玩家在房间里的ID
关系OwnerActorNr=ViewID/PhotonNetwork.MAX_VIEW_IDS
player.ActorNumber: 玩家在房间里的ID
如果photonView.OwnerActorNr==player.ActorNumber说明这个photoView是玩家自己的(即,本地客户端的)。
PhotonNetwork.SerializationRate=30;//设置数据同步频率为1000/30≈33ms同步一次数据。
PhotonNetwork.ServerTimestamp;//服务器时间(单位:毫秒)
PhotonNetwork.Time;//服务器时间(单位:秒)
四、监听所有网络事件回调
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Photon.Realtime; using Photon.Pun; /// <summary> /// 监听所有网络事件回调 /// </summary> public class ConnectAndJoinRoom : MonoBehaviour, IInRoomCallbacks, IConnectionCallbacks, IMatchmakingCallbacks, ILobbyCallbacks, IOnEventCallback, IWebRpcCallback { void Awake() { PhotonNetwork.AddCallbackTarget(this); } void Start() { if (!PhotonNetwork.IsConnected) PhotonNetwork.ConnectUsingSettings(); } void Update() { if (PhotonNetwork.NetworkingClient != null) PhotonNetwork.NetworkingClient.Service(); } #region IInRoomCallbacks public void OnPlayerEnteredRoom(Player newPlayer) { } public void OnPlayerLeftRoom(Player otherPlayer) { } public void OnRoomPropertiesUpdate(ExitGames.Client.Photon.Hashtable propertiesThatChanged) { } public void OnPlayerPropertiesUpdate(Player targetPlayer, ExitGames.Client.Photon.Hashtable changedProps) { } public void OnMasterClientSwitched(Player newMasterClient) { } #endregion #region IConnectionCallbacks public void OnConnected() { } public void OnConnectedToMaster() { } public void OnDisconnected(DisconnectCause cause) { } public void OnRegionListReceived(RegionHandler regionHandler) { } public void OnCustomAuthenticationResponse(Dictionary<string, object> data) { } public void OnCustomAuthenticationFailed(string debugMessage) { } #endregion #region IMatchmakingCallbacks public void OnFriendListUpdate(List<FriendInfo> friendList) { } public void OnCreatedRoom() { } public void OnCreateRoomFailed(short returnCode, string message) { } public void OnJoinedRoom() { } public void OnJoinRoomFailed(short returnCode, string message) { } public void OnJoinRandomFailed(short returnCode, string message) { } public void OnLeftRoom() { } #endregion #region ILobbyCallbacks public void OnJoinedLobby() { } public void OnLeftLobby() { } public void OnRoomListUpdate(List<RoomInfo> roomList) { } public void OnLobbyStatisticsUpdate(List<TypedLobbyInfo> lobbyStatistics) { } #endregion #region IOnEventCallback public void OnEvent(ExitGames.Client.Photon.EventData photonEvent) { } #endregion #region IWebRpcCallback public void OnWebRpcResponse(ExitGames.Client.Photon.OperationResponse response) { } #endregion }
通常在OnConnectedToMaster回调中创建并加入房间,加入房间成功后会收到OnJoinedRoom回调。
RoomOptions options = new RoomOptions(); PhotonNetwork.JoinOrCreateRoom("MyRoomName", options, TypedLobby.Default);
向房间中的其他玩家发送事件,其他玩家通过OnEvent回调接收事件。
byte code = 199;//自定义事件类型[0-199] //发送的内容存放到Hashtable,用byte作key ExitGames.Client.Photon.Hashtable table = new ExitGames.Client.Photon.Hashtable(); table[(byte)0] = 100; table[(byte)1] = 200; RaiseEventOptions eventOptions = RaiseEventOptions.Default; SendOptions sendOptions = SendOptions.SendReliable; PhotonNetwork.RaiseEvent(code, table, eventOptions, sendOptions);
五、PunRPC特性
[Photon.Pun.PunRPC] private void RPCFun() { }调用方式photonView.RPC("RPCFun", RpcTarget.All);
光子服务器(Photon Server)
https://vibrantlink.com/photonserver/
下载 https://www.photonengine.com/zh-CN/sdks#serverserver
下载时记着先选标签
双击安装后
运行deploy\bin_Win64\PhotonControl.exe
运行测试客户端 Run Testclient (LoadBalancing)
在您应用许可证文件之前,Photon Server将限制为20个并发连接。
Photon Server配置文件deploy\bin_Win64\PhotonServer.config
配置Photon Server的IP和Port
Unity工程中配置PhotonServerSettings
当使用自己部署的Photon Server时,不要勾选Use Name Server,填好Master Server的IP和Port。
读取配置PhotonNetwork.PhotonServerSettings
运行Unity工程测试
Windows 10启动Photon Server报错
9600: 09:59:47.940 - CounterPublisher:4 - PhotonRunning() failed. Exception:
System.TypeInitializationException: “Photon.CounterPublisher.SystemCounter”的类型初始值设定项引发异常。 ---> System.InvalidOperationException: 无法加载计数器名称数据,因为从注册表读取的索引“”无效。
在 System.Diagnostics.PerformanceCounterLib.GetStringTable(Boolean isHelp)
在 System.Diagnostics.PerformanceCounterLib.get_NameTable()
在 System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
在 System.Diagnostics.PerformanceCounterLib.CategoryExists(String machine, String category)
在 System.Diagnostics.PerformanceCounterCategory.Exists(String categoryName, String machineName)
在 ExitGames.Diagnostics.Counter.PerformanceCounterReader.Initialize() 位置 c:\(Work)\(EG)\exitgames-libs\src\Core\Diagnostics\Counter\PerformanceCounterReader.cs:行号 134
在 Photon.CounterPublisher.SystemCounter..cctor() 位置 d:\dev\photon-socketserver-sdk_cloud\src-server\CounterPublisher\SystemCounter.cs:行号 36
--- 内部异常堆栈跟踪的结尾 ---
分析原因:Photon Server的计数器被Windows禁用了。
解决方案
参见 http://www.cnblogs.com/xiezunxu/articles/7797880.html
在cmd中输入perfmon,可查看windows禁用了哪些计数器。
在cmd中输入LODCTR/R,从系统备份存储中重建性能计数器设置。
为了让局域网内的其他玩家能够访问服务器,需要设置成Set Local IP
注意:如果没显示本机的局域网IP,检查下电脑有没连上局域网。连上局域网后重启电脑和Photon Server
Photon Voice
如果需要语音功能,需从Unity Asset Store下载语音插件
数字信号处理(Digital Signal Processing, DSP)
回声消除器(Acoustic Echo Canceller,AEC),可以消除各种延迟的回声。
背景噪音抑制(Automatic Noise Suppression, ANS),自动消除杂音。
自动增益补偿(Automatic Gain Control, AGC),自动调节麦克风收音量,避免发言者与麦克风的距离改变时,声音忽大忽小。
语音活动检测(Voice Activity Detection, VAD),在噪声环境中检测语音存在与否。
每个进入房间的玩家会实例化一个RemoteSpeakerPrefab对象
标签: Unity3d
日历
最新文章
随机文章
热门文章
分类
存档
- 2024年11月(3)
- 2024年10月(5)
- 2024年9月(3)
- 2024年8月(3)
- 2024年7月(11)
- 2024年6月(3)
- 2024年5月(9)
- 2024年4月(10)
- 2024年3月(11)
- 2024年2月(24)
- 2024年1月(12)
- 2023年12月(3)
- 2023年11月(9)
- 2023年10月(7)
- 2023年9月(2)
- 2023年8月(7)
- 2023年7月(9)
- 2023年6月(6)
- 2023年5月(7)
- 2023年4月(11)
- 2023年3月(6)
- 2023年2月(11)
- 2023年1月(8)
- 2022年12月(2)
- 2022年11月(4)
- 2022年10月(10)
- 2022年9月(2)
- 2022年8月(13)
- 2022年7月(7)
- 2022年6月(11)
- 2022年5月(18)
- 2022年4月(29)
- 2022年3月(5)
- 2022年2月(6)
- 2022年1月(8)
- 2021年12月(5)
- 2021年11月(3)
- 2021年10月(4)
- 2021年9月(9)
- 2021年8月(14)
- 2021年7月(8)
- 2021年6月(5)
- 2021年5月(2)
- 2021年4月(3)
- 2021年3月(7)
- 2021年2月(2)
- 2021年1月(8)
- 2020年12月(7)
- 2020年11月(2)
- 2020年10月(6)
- 2020年9月(9)
- 2020年8月(10)
- 2020年7月(9)
- 2020年6月(18)
- 2020年5月(4)
- 2020年4月(25)
- 2020年3月(38)
- 2020年1月(21)
- 2019年12月(13)
- 2019年11月(29)
- 2019年10月(44)
- 2019年9月(17)
- 2019年8月(18)
- 2019年7月(25)
- 2019年6月(25)
- 2019年5月(17)
- 2019年4月(10)
- 2019年3月(36)
- 2019年2月(35)
- 2019年1月(28)
- 2018年12月(30)
- 2018年11月(22)
- 2018年10月(4)
- 2018年9月(7)
- 2018年8月(13)
- 2018年7月(13)
- 2018年6月(6)
- 2018年5月(5)
- 2018年4月(13)
- 2018年3月(5)
- 2018年2月(3)
- 2018年1月(8)
- 2017年12月(35)
- 2017年11月(17)
- 2017年10月(16)
- 2017年9月(17)
- 2017年8月(20)
- 2017年7月(34)
- 2017年6月(17)
- 2017年5月(15)
- 2017年4月(32)
- 2017年3月(8)
- 2017年2月(2)
- 2017年1月(5)
- 2016年12月(14)
- 2016年11月(26)
- 2016年10月(12)
- 2016年9月(25)
- 2016年8月(32)
- 2016年7月(14)
- 2016年6月(21)
- 2016年5月(17)
- 2016年4月(13)
- 2016年3月(8)
- 2016年2月(8)
- 2016年1月(18)
- 2015年12月(13)
- 2015年11月(15)
- 2015年10月(12)
- 2015年9月(18)
- 2015年8月(21)
- 2015年7月(35)
- 2015年6月(13)
- 2015年5月(9)
- 2015年4月(4)
- 2015年3月(5)
- 2015年2月(4)
- 2015年1月(13)
- 2014年12月(7)
- 2014年11月(5)
- 2014年10月(4)
- 2014年9月(8)
- 2014年8月(16)
- 2014年7月(26)
- 2014年6月(22)
- 2014年5月(28)
- 2014年4月(15)
友情链接
- Unity官网
- Unity圣典
- Unity在线手册
- Unity中文手册(圣典)
- Unity官方中文论坛
- Unity游戏蛮牛用户文档
- Unity下载存档
- Unity引擎源码下载
- Unity服务
- Unity Ads
- wiki.unity3d
- Visual Studio Code官网
- SenseAR开发文档
- MSDN
- C# 参考
- C# 编程指南
- .NET Framework类库
- .NET 文档
- .NET 开发
- WPF官方文档
- uLua
- xLua
- SharpZipLib
- Protobuf-net
- Protobuf.js
- OpenSSL
- OPEN CASCADE
- JSON
- MessagePack
- C在线工具
- 游戏蛮牛
- GreenVPN
- 聚合数据
- 热云
- 融云
- 腾讯云
- 腾讯开放平台
- 腾讯游戏服务
- 腾讯游戏开发者平台
- 腾讯课堂
- 微信开放平台
- 腾讯实时音视频
- 腾讯即时通信IM
- 微信公众平台技术文档
- 白鹭引擎官网
- 白鹭引擎开放平台
- 白鹭引擎开发文档
- FairyGUI编辑器
- PureMVC-TypeScript
- 讯飞开放平台
- 亲加通讯云
- Cygwin
- Mono开发者联盟
- Scut游戏服务器引擎
- KBEngine游戏服务器引擎
- Photon游戏服务器引擎
- 码云
- SharpSvn
- 腾讯bugly
- 4399原创平台
- 开源中国
- Firebase
- Firebase-Admob-Unity
- google-services-unity
- Firebase SDK for Unity
- Google-Firebase-SDK
- AppsFlyer SDK
- android-repository
- CQASO
- Facebook开发者平台
- gradle下载
- GradleBuildTool下载
- Android Developers
- Google中国开发者
- AndroidDevTools
- Android社区
- Android开发工具
- Google Play Games Services
- Google商店
- Google APIs for Android
- 金钱豹VPN
- TouchSense SDK
- MakeHuman
- Online RSA Key Converter
- Windows UWP应用
- Visual Studio For Unity
- Open CASCADE Technology
- 慕课网
- 阿里云服务器ECS
- 在线免费文字转语音系统
- AI Studio
- 网云穿
- 百度网盘开放平台
- 迅捷画图
- 菜鸟工具
- [CSDN] 程序员研修院
- 华为人脸识别
- 百度AR导航导览SDK
- 海康威视官网
- 海康开放平台
- 海康SDK下载
- git download
交流QQ群
-
Flash游戏设计: 86184192
Unity游戏设计: 171855449
游戏设计订阅号