Unity如何多人联机游戏开发

Photon是目前比较好用的游戏服务器。目前网上对于Photon的服务器讲解比较少,最近也对Photon做了初步的了解,做一个极其详细的入门。
首先就是得下载Photon咯
https://www.photonengine.com/en/OnPremise/Download 这个是服务器下载。(上传图片的功能崩溃了。。。)
这个服务器是有权限的,免费的有100人上限和30天免费,调试用的话,100人的还是很合算的。
https://www.photonengine.com/en/OnPremise/Dashboard& (得注册账号哦。。。)
这里有个比较好的教程 http://download.csdn.net/download/a36547 是免费的,下载就好(CSDN的)
http://www.cnblogs.com/liusuqi/category/447143.html这个博客对Photon的讲解非常好
如果你能看懂教程就可以右上角了。
现在开始正题。在服务器的deploy中是配置所有服务器的,会看到有几个启动版本bin_Win32,bin_Win32_xp,根据自己的系统环境来选择。
我系统是win10选的就是bin_Win64 里面有个PhotonControl.exe就是运行服务器。双击启动它。
在你的系统右下角就会发现一个小圆圈,这个就是服务器啦!
右键它你会发现有个Photon instance:下面有个Default就是我们要用的服务器啦,上面的教程中这里是不同的,不过没差多少。
对了,下载下来的权限就放在这个bin文件夹,我的就是bin_Win64,弄完权限记得重启服务器啊。
下面我们就来写一下服务器代码。一个简单的用户登录
Photon用的C#我们就用VS写,我用的是VS2015
首先我们新建一个C#类库我们叫MyServer,让我们引入3个dll,在Photon的lib中
ExitGamesLibs.dll
Photon.SocketServer.dll
PhotonHostRuntimeInterfaces.dll
新建一个C#类我们叫MyPeer,继承PeerBase,然后重写函数,别忘了using
using Photon.SocketS
using PhotonHostRuntimeI
namespace MyServer
using System.C
public class MyPeer : PeerBase
Hashtable userT
public MyPeer(IRpcProtocol protocol,IPhotonPeer photonPeer) : base(protocol, photonPeer)
userTabel = new Hashtable();
userTabel.Add("123", "1234");
protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
//失去连线时候要处理的事项,例如释放资源
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
//取得Client端传过来的要求加以处理
switch (operationRequest.OperationCode)
case (byte)OpCodeEnum.Login:
string uname = (string)operationRequest.Parameters[(byte)OpKeyEnum.UserName];
string pwd = (string)operationRequest.Parameters[(byte)OpKeyEnum.PassWord];
if (userTabel.ContainsKey(uname) && userTabel[uname].Equals(pwd))
SendOperationResponse(new OperationResponse((byte)OpCodeEnum.LoginSuccess, null), new SendParameters());
SendOperationResponse(new OperationResponse((byte)OpCodeEnum.LoginFailed, null), new SendParameters());
然后我们再建一个C#类叫MyApplication,我们继承AppLicationBase,然后全部重写就好,每个函数的意思我都给出来了
using Photon.SocketS
namespace MyServer
public class MyApplication : ApplicationBase
protected override PeerBase CreatePeer(InitRequest initRequest)
//建立连线并回传给Photon Server
return new MyPeer(initRequest.Protocol, initRequest.PhotonPeer);
protected override void Setup()
//初始化GameServer
protected override void TearDown()
//关闭GameServer并释放资源
还有个Message是用来标识状态的,同样新建一个C#类叫Message
namespace MyServer.Message
enum OpCodeEnum : byte
Login = 1,
LoginSuccess = 2,
LoginFailed = 3,
Create = 250,
Join = 255,
Leave = 254,
RaiseEvent = 253,
SetProperties = 252,
GetProperties = 251
enum OpKeyEnum : byte
RoomId = 251,
UserName = 252,
PassWord = 253
&然后比较重要的一步,在VS中的解决方案中,我们右键我们的MyServer(C#类库名)打开属性,选择生成,把输出中的输出路径改为bin\
因为Photon就读取bin目录中的dll。
然后我们就生成服务器就好啦~~~
然后把我们的服务器MyServer中除了bin文件夹其他都可以删除,然后放到Photon中的deploy文件夹中,然后我们来配置一下Photon
打开deploy目录中的bin目录,我就打开bin_Win64中的PhotonServer.config,用VS打开即可
建议阅读PhotonServer.config文件中的注释,不会英语的可以用有道。很有帮助
我们用的是Udp的传输方式,Photon只有一个接听端口就是5055,所以防火墙不要封这个端口还有843,是Unity和Flash的一个接通端口所以也不要封,防火墙不会开固定端口的见http://windows.microsoft.com/zh-cn/windows/open-port-windows-firewall#1TC=windows-7
然后我们要加一段代码在&Applications Default="Lite"&下面
&!-- MyServer Application --&
&Application
Name="MyServer"
BaseDirectory="MyServer"
Assembly="MyServer"
Type="MyServer.MyApplication"
ForceAutoRestart="true"
WatchFiles="config"
ExcludeFiles="log4net.config"&
&/Application&
然后保存即可。
这样我们服务器端就配置完成了,现在让我们打开Default中的Start as application,然后打开Open Logs 见到Server is running。。。表面服务器建立成功了。
然后就是Unity端了
我们新建一个工程,然后引入一个dll直接拖到Unity中就行Photon3Unity3D.dll 同样也在lib中。
让我们建一个C# Script 叫hotonSocket,同样在引用中导入Photon3Unity3D.dll
using UnityE
using ExitGames.Client.P
using System.Collections.G
public class PhotonSocket : MonoBehaviour,IPhotonPeerListener {
#region 单例
private static PhotonSocket _I
public static PhotonSocket Instance
get { return _I }
#endregion
private string //最好在Awake或Start中赋值,Unity 小问题,容易造成值不更改,还有最好写成私有
private string S //同上
private PhotonP
public ClientS
void Awake ()
_Instance = this;
address = "localhost:5055";
Server = "MyServer";
state = ClientState.DisC
peer = new PhotonPeer(this, ConnectionProtocol.Udp);
peer.Connect(address, Server);
public void SendMessage(byte Code,Dictionary&byte,object& param)
peer.OpCustom(Code, param,true);
void Update ()
peer.Service();
public void DebugReturn(DebugLevel level, string message)
public void OnEvent(EventData eventData)
public void OnOperationResponse(OperationResponse operationResponse)
switch(operationResponse.OperationCode)
case (byte)OpCodeEnum.LoginSuccess:
Debug.Log("login Success");
state = ClientState.LoginS
case (byte)OpCodeEnum.LoginFailed:
Debug.Log("login Failed");
state = ClientState.LoginF
public void OnStatusChanged(StatusCode statusCode)
switch(statusCode)
case StatusCode.Connect:
Debug.Log("Connect");
case StatusCode.Disconnect:
Debug.Log("DisConnect");
public enum ClientState : byte
DisConnect,
LoginSuccess,
LoginFailed
enum OpCodeEnum : byte
Login = 1,
LoginSuccess = 2,
LoginFailed = 3,
这样Unity的部分也完事了,就可以来测试啦,出现Connect的Debug就表面链接服务器成功,出现LoginSuccess就OK了。
以上的都是我们在教程中都能找到的部分,然后我们来说说教程中没有的Unity部分的address。
如果想局域网联机的就要找到你的本机内网IP,然后让address = 本机IP:5055 这样就OK了,
如果要想要外网链接呢有两种情况,一种你是用路由器的,也有两种方式,一种开DMZ主机,一种开虚拟服务器。
第一种DMZ主机,不建议用这种方式,他会把你的IP完全暴露在外网,不安全, address = 外网IP:5055
第二种虚拟服务器,这种方式就是开放部分端口,比较高端的路由器可以设置端口对端口,不高端的路由器只能指定端口,address = WAN口IP:5055
没有服务器的呢,下一个花生壳软件,他会给你一个免费的域名,然后挂在你的外网IP上然后 address = 花生壳域名:5055
阅读(...) 评论()Unity多人联机游戏项目实战视频教程 - 我学院_中国IT互联网游戏开发游戏设计免费在线教育平台,学游戏就上我学院 - Powered By EduSohounity3d里 如何实现局域网联机_百度知道
unity3d里 如何实现局域网联机
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
如果只是做简单的联机,没必要要photon unity本身就提供了联机的组件networkview, 详见官方的文档 另外unity支持自定义的socket通信,所以,如果要做的话,建议先学会unity3d里 如何实现局域网联机
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。unity如何真机调试
[问题点数:40分]
本版专家分:0
结帖率 66.67%
CSDN今日推荐
本版专家分:80
本版专家分:241
本版专家分:0
本版专家分:0
匿名用户不能发表回复!
其他相关推荐unity3D如何开发即时网络在线游戏??【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:88,324贴子:
unity3D如何开发即时网络在线游戏??收藏
看了mayaxiaoan的那个melee的游戏甚是激动,但是找了好多视频都没有讲解unity即时网络编程方面的不知道这方面在U3D里该如何开发??
来这里在线学习Unity!
要连接服务器啥的……百度有的吧=_=
用c# 里面的socket
不懂你们说的。。。SFS是啥???还有C#开发服务器方便么?各种百度不到,悲剧
找个程序员合体吧~先制定通讯协议,然后用C++写服务器,游戏客户端按照通讯协议将数据发送到服务器,服务器处理游戏逻辑,然后返回数据给游戏客户端。按我的理解应该是这样
强烈推荐photon 插件 很方便 就是要100刀
我纠结这个问题很久了,国内国外的教程基本都看过了,导出程序试了结果不能联机,老夫吐了一地的血啊。还说能联机的。。。局域网也不行
Xrender for Unity是一款面向三维设计师的自助式unity 3d工具.为用户提供灵活,高效,低成本的极速 unity 3d服务
用photon云服务器 so ease
登录百度帐号

我要回帖

更多关于 我的世界联机 的文章

 

随机推荐