开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2059

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 617|回复: 7

[枫叶飘零] Photon之Realtime 开始使用

[复制链接]  [移动端链接]
排名
2017
昨日变化
7

41

主题

212

帖子

1453

积分

Rank: 9Rank: 9Rank: 9

UID
6728
好友
14
蛮牛币
5778
威望
0
注册时间
2013-10-30
在线时间
547 小时
最后登录
2018-1-18

专栏作家社区QQ达人

发表于 2018-1-5 15:03:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
Photon Realtime是一个完全管理的服务(SaaS),在全球范围内运行的Photon内部部署服务器,随时可在全球各地进行低延迟多人游戏。
使用LoadBalancing API将播放器与共享游戏会话(称为“房间”)进行匹配,并实时跨平台上的连接播放器之间的同步传输消息。 所有客户端SDK可以互相交互,无论是iOS,,Web,控制台还是独立的。
Connect
Photon实时应用程序需要AppId才能连接。 免费注册后,从网站管理页面获取您需要的资料。只需设置您的AppId并选择要连接的区域。
using ExitGames.Client.Photon.LoadBalancing;
// It is best practice to extend the LoadBalancingClient to modify callbacks and react to updates coming from the server.
public class MyClient : LoadBalancingClient
{
    // call this to connect to Photon
    void CallConnect()
    {
        this.AppId = "<your appid>";  // set your app id here
        this.AppVersion = "1.0";  // set your app version here
        // "eu" is the European region's token
        if (!this.ConnectToRegionMaster("eu")) // can return false for errors
        {
            this.DebugReturn(DebugLevel.ERROR, "Can't connect to: " + this.CurrentServerAddress);
        }
    }
}

Call Service
LoadBalancing API的构建与您的游戏逻辑集成方便快捷。 您可以精确控制何时处理传入的事件内容以及发送任何内容的频率。
在内部,两个方向都被缓冲,直到你的游戏调用LoadBalancingClient.Service()。
游戏通常使用游戏循环来计算更新,然后刷新屏幕。 Call Serveice()每秒10到20次。
void GameLoop()
{
    while (!shouldExit)
    {
        this.Service();
        // wait for few frames/milliseconds
    }
}
Disconnect
当应用程序退出或用户注销时不要忘记断开连接。
void Disconnect()
{
    if (connected)
    {
        this.Disconnect();
    }
}
Matchmaking
Create a Game
要创建一个新的房间,也就是游戏,在连接的LoadBalancing客户端上调用“创建房间”操作。
void MyCreateRoom(string roomName, byte maxPlayers)
{
    this.OpCreateRoom(roomName, new RoomOptions() { MaxPlayers = maxPlayers }, TypedLobby.Default);
}
这设置了房间中允许的玩家的房间名称和数量。 客户端将自动进入新房间。 使用“创建房间”操作时,如果不存在房间,会在加入之前创建房间。房间存在可以获取到房间列表,在选择是否加入。
您可以定义“自定义房间属性”,以便在创建房间时设置房间的共享值。 可以使用定制房间属性来存储地图名称,水平或圆形持续时间。 自定义属性的键必须是字符串。 当然这些值也可以在房间里设置和修改。
您可以选择任何您还可以在大厅显示的自定义属性,方法是将可选数组的名称设置为“大厅的自定义房间属性”。 大厅中显示的属性可用于配对,也可用作随机匹配的过滤器。
Find a Game
客户以名称加入游戏,或者要求Photon找到完美的搭档。
查找房间...
随机:随机匹配玩家。 可选地填充房间或平均分配玩家。
使用过滤器进行随机匹配,以获得更好的匹配。
按列表:大厅列出可见的房间,让玩家选择并手动加入。
这是私人的:加入隐藏的房间,你知道的名字。
或参数化:通过定义预期的属性自定义随机匹配。
// join random rooms easily, filtering for specific room properties, if needed
Hashtable expectedCustomRoomProperties = new Hashtable();
// custom props can have any name but the key must be string
expectedCustomRoomProperties["map"] = 1;
// joining a random room with the map we selected before
this.OpJoinRandomRoom(expectedCustomRoomProperties, (byte)expectedMaxPlayers);
Persist Games
使用Photon Realtime,房间的数据可以轻松保存和加载。 您需要使用外部Web服务器设置webhook来连接Photon Cloud。
一旦设置,房间状态将自动保存给您。 重新加入房间:
this.OpReJoinRoom(savedRoomName);
Gameplay
Sending Events
一个客户端发生的任何事件都可以作为事件发送,以更新同一个房间中的每个人。
更新你的player与统计,匹配或你现在的回合。 Photon将尽快发送(可选的可靠性)。
发送消息/事件:发送任何类型的数据给其他玩家。
玩家/房间:Photon更新和同步这些,甚至到稍后加入的玩家。也就是消息的同步
byte eventCode = 1; // make up event codes at will
Hashtable evData = new Hashtable();    // put your data into a key-value hashtable
bool sendReliable = false; // send something reliable if it has to arrive everywhere
this.OpRaiseEvent(eventCode, evData, sendReliable, RaiseEventOptions.Default);

您的事件代码应保持在200以下。每个代码应定义事件的类型及其所携带的内容。
上述示例中的事件数据是一个Hashtable。 它可以是一个字节[]或基本上由Photon的序列化支持的任何数据类型(一个字符串,float []等))。 有关详细信息,请参阅光子序列化。
Receiving Events
每当调度一个事件时,调用一个处理程序。 一个例子如下所示。
public override void OnEvent(EventData photonEvent)
{
    // important to call, to keep state up to date
    base.OnEvent(photonEvent);
    // we have defined two event codes, let's determine what to do
    switch (photonEvent.Code)
    {
        case 1:
            // do something
            break;
        case 2:
            // do something else
            break;
    }
}
每个事件都按客户端发送的方式运送其代码和数据。
有关默认事件代码的最新列表,请查找SDK中的事件代码常量,例如。 在C#中的ExitGames.Client.Photon.LoadBalancing.EventCode中。
自定义或权威的服务器逻辑
Photon Cloud产品已经允许广泛的游戏类型。
第一人称射击 吃鸡游戏
赛车游戏
MObe类型的游戏
休闲实时游戏
异步和同步游戏
使用Photon服务器或Photon插件实现您自己的自定义逻辑。




回复

使用道具 举报

3偶尔光临
158/300
排名
10749
昨日变化
168

4

主题

39

帖子

158

积分

Rank: 3Rank: 3Rank: 3

UID
195502
好友
0
蛮牛币
162
威望
0
注册时间
2016-12-23
在线时间
43 小时
最后登录
2018-1-18
发表于 2018-1-6 11:11:23 | 显示全部楼层
感谢分享

回复

使用道具 举报

7日久生情
2698/5000
排名
357
昨日变化
4

1

主题

130

帖子

2698

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
69456
好友
6
蛮牛币
3154
威望
0
注册时间
2015-1-19
在线时间
1109 小时
最后登录
2018-1-18
QQ
发表于 2018-1-7 21:39:28 | 显示全部楼层
谢谢!~~~~~~

回复

使用道具 举报

5熟悉之中
533/1000
排名
8109
昨日变化
5

0

主题

298

帖子

533

积分

Rank: 5Rank: 5

UID
146677
好友
9
蛮牛币
2150
威望
0
注册时间
2016-4-25
在线时间
115 小时
最后登录
2018-1-17
QQ
发表于 2018-1-8 09:24:05 | 显示全部楼层
谢谢分享

回复

使用道具 举报

2初来乍到
105/150
排名
12031
昨日变化
193

0

主题

28

帖子

105

积分

Rank: 2Rank: 2

UID
248343
好友
0
蛮牛币
198
威望
0
注册时间
2017-10-12
在线时间
17 小时
最后登录
2018-1-18
发表于 2018-1-8 09:49:32 | 显示全部楼层
v5v5v5v5v5v5

回复

使用道具 举报

2初来乍到
105/150
排名
12031
昨日变化
193

0

主题

28

帖子

105

积分

Rank: 2Rank: 2

UID
248343
好友
0
蛮牛币
198
威望
0
注册时间
2017-10-12
在线时间
17 小时
最后登录
2018-1-18
发表于 2018-1-9 10:20:48 | 显示全部楼层
v5v5v5v5v5v5v5

回复

使用道具 举报

排名
24825
昨日变化
22

1

主题

20

帖子

53

积分

Rank: 2Rank: 2

UID
165641
好友
0
蛮牛币
374
威望
0
注册时间
2016-9-3
在线时间
18 小时
最后登录
2018-1-9
发表于 2018-1-9 11:02:57 | 显示全部楼层
unet的出现对photon造成了冲击

回复 支持 反对

使用道具 举报

3偶尔光临
166/300
排名
13146
昨日变化
4

0

主题

74

帖子

166

积分

Rank: 3Rank: 3Rank: 3

UID
249155
好友
0
蛮牛币
81
威望
0
注册时间
2017-10-16
在线时间
43 小时
最后登录
2018-1-17
发表于 2018-1-10 16:42:16 | 显示全部楼层
xiexiefengxiang
[发帖际遇]: 下雨也是一种美 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表