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

扫一扫,访问微社区

蛮牛译馆

关注:629

当前位置:游戏蛮牛 技术专区 蛮牛译馆

查看: 2190|回复: 9

[外文翻译] Photon之PUN 功能概述

[复制链接]  [移动端链接]
排名
1708
昨日变化
2

50

主题

238

帖子

1723

积分

Rank: 9Rank: 9Rank: 9

UID
6728
好友
18
蛮牛币
6298
威望
0
注册时间
2013-10-30
在线时间
645 小时
最后登录
2018-5-23

专栏作家社区QQ达人

发表于 2017-10-14 09:52:00 | 显示全部楼层 |阅读模式

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

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

x
Unity+Photon PUN插件可以开发实时对战游戏类似大家熟悉的王者荣耀,绝地大逃杀(吃鸡游戏),PUN都可以实现什么样的功能?本文进行说明。
功能概述
PhotonNetwork Plugin for
导入PUN时,弹出“向导”窗口。 要输入您的电子邮件地址,请跳过此步骤输入现有帐户的AppId或切换到“自我托管”。这将为项目中的云服务或您自己的Photon服务器创建一个配置:PhotonServerSettings。PUN由相当多的文件组成,但只有一个文件真正重要:PhotonNetwork。 此类包含所需的所有函数和变量。 如果您有自定义要求,您可以随时修改源文件。
要使用UnityScript中的PUN,将两个文件夹“PhotonNetwork”和“UtilityScripts”移动到“Assets \ Plugins \”文件夹。
photon初始化配置文章可以看这里。
Connecting and the Master Server 连接和主服务器
PhotonNetwork始终使用主服务器和一个或多个游戏服务器。 主服务器管理当前可用的游戏,并进行配对。 一旦找到或创建了一个房间,实际的游戏是在游戏服务器上完成的。所有服务器都在专用机器上运行。 你不用担心服务器组织,PUN会为你处理。
PhotonNetwork.ConnectUsingSettings("v1.0");
上面的代码是您需要连接并使用Photon的功能的所有代码。 它设置您客户的游戏版本,并使用PhotonServerSettings(由PUN向导设置)进行连接。 您也可以修改PhotonServerSettings以连接到您自己的服务器。 或者,使用Connect()方法创建连接连接到自己服务器上,忽略PhotonServerSettings配置文件。
Versioning by GameVersion 版本
Photon的LoadBalancing逻辑使用您的AppId将游戏与其他人分开。 玩家也可以通过游戏版本ConnectUsingSettings的参数分开。 这样,您可以使用新功能发布客户端,而不会破坏游戏的旧版本。由于我们不能保证不同的Photon Unity Networking版本相互兼容,所以PUN将自己的版本号附加到游戏的版本号。 更新PUN可能会将新客户端与旧版本分开,但不会破坏较旧的客户端。如果您同时使用PUN和非PUN客户端,或者您有不同PUN版本的客户端,则需要考虑PUN的特定AppVersion格式:{gameVersion} _ {PUN_version}。 所以如果你在PUN中将gameVersion设置为“1.0”,并使用PUN版本“1.80”,那么生成的AppVersion是“1.0_1.80”。
如果您混合PUN和非PUN客户端,请注意PUN将几个Unity相关类注册为自定义类型。 这允许Unity的Vector3的序列化,但是您需要检查PUN的“CustomTypes.cs”,以便在其他客户端SDK中支持此功能。
Creating and Joining Games 创建和加入游戏
接下来,您将要加入或创建一个房间。 以下代码片段显示了一些必需的功能:
puN功能概述01.png
在最好的情况下,你的游戏使用随机配对。 JoinRandomRoom()方法将尝试加入任何房间。如果失败(没有房间接受另一个玩家),只需创建一个新房间,等待其他玩家随机加入。
或者,您的客户可以获取当前可用房间的列表。这是通过加入大厅来完成的。
大厅自动将客房列表发送给客户,并间隔更新(以减少流量)。玩家不会看到对方,无法沟通(以防止游戏忙碌时出现问题)。
PhotonNetwork插件可以在连接时自动加入默认大厅。在PhotonServerSettings文件中使用“Auto-Join Lobby”复选框打开此项。
如果取消选中自动加入大厅,将调用OnConnectedToMaster回调。否则,OnConnectedToMaster将被跳过,只有OnJoinedLobby将被调用。
当您的客户在大厅时,它会获取房间列表的更新,它会缓存。如果需要,您可以通过GetRoomList在每个帧中访问列表。
puN功能概述02.png
MonoBehaviour Callbacks 回调
PhotonNetwork使用多个回调来让您的游戏知道状态变化,如“连接”或“加入游戏”。 像Unity一样,回调可以在任何脚本中实现。
如果您的脚本扩展Photon.PunBehaviour,您可以单独覆盖每个回调。 在这种情况下,您不必调用基本实现。
puN功能概述03.png
你不必延伸PunBehaviour。 如果您自行实施,所有回调也可以正常工作。 它们也在枚举PhotonNetworkingMessage中列出和描述。
这包括设置游戏室的基本知识。 接下来是游戏中的实际交流。
Sending Messages In Game Rooms 在游戏室发送消息
在房间内,您可以向其他连接的玩家发送网络消息。 此外,您可以发送缓冲的消息,也将发送给将来连接的玩家(例如用于产生播放器)。
可以使用两种方法来发送消息。 通过RPCs或者在PhotonView观察到的脚本中实现OnSerializePhotonView。
您可以监听某些网络事件(如OnPhotonInstantiate或OnPhotonPlayerConnected)的回调,您可以触发其中某些事件,例如。PhotonNetwork.Instantiate。
PhotonView PhotonView组件
PhotonView是用于发送消息(RPC和OnSerializePhotonView)的脚本组件。 您需要将PhotonView附加到游戏对象或预制。 请注意,PhotonView与Unity的NetworkView非常相似。
在任何时候,您至少需要一个PhotonView在您的游戏中发送消息,并可选择实例化/分配其他PhotonViews。
要将PhotonView添加到游戏对象中,只需选择一个游戏对象,并使用:“组件/杂项/光子视图”。
puN功能概述03_2.png
Observe Transform 观察变换
如果您将Transform转换为PhotonView的Observe属性,则可以选择同步“位置”,“旋转”和“缩放”,或者将其与播放器的组合进行同步。 这可以为原型设计或小型游戏提供极大的帮助。 注意:对任何观察值的更改将发出所有观察值,不仅仅是改变的单个值。 此外,更新不会被平滑或内插。需要自己进行平滑处理。
Observe MonoBehaviour 观察MonoBehaviour
PhotonView可以设置为观察MonoBehaviour。 在这种情况下,脚本的OnPhotonSerializeView方法将被调用。 这种方法被要求写入对象的状态并读取它,具体取决于脚本是否由本地播放器控制。
下面的简单代码显示如何添加字符状态同步只需几行代码:
puN功能概述04.png
Observe Options
“观察”选项可以让您选择如何以及何时发送更新。它还会影响到OnPhotonSerializeView的调用频率。
如果PhotonView仅用于RPC,则可能会有用。
不可靠的更新按“原样”发送,但可能会丢失。这个想法是下一次更新即将到达,并提供所需的正确/绝对值。这对位置和其他绝对数据是有好处的,但不利于触发器如切换武器。当用于同步一个GameObject的位置时,它将始终发送更新,即使GameObject停止移动。
不可靠的更改将检查每个更新的更改。如果所有值与以前发送的值保持一致,则一个更新将被发送为可靠的,然后所有者停止发送更新,除非事情再次发生。这对于可能停止移动且不会在一段时间内创建进一步更新的GameObjects很有用。就像找到自己的地方不再移动的盒子。
可靠的Delta Compressed会将更新的每个值与其前身进行比较。忽略未更改的值以保持流量低。接收方只需填写以前更新的值即可。通过OnPhotonSerializeView原子写的任何东西都可以通过这种方式进行检查和压缩。如果没有更改,OnPhotonSerializeView不会在接收客户端上被调用。这里的“可靠”部分需要一些费用,所以对于小的更新,应考虑开销。
现在,再到另一种沟通方式:RPC。
Remote Procedure Calls 远程过程调用
远程过程调用(RPC)使您可以调用“网络化GameObjects”中的方法,这对用户输入触发的次要操作非常有用。
一个RPC在同一个房间的每个玩家在同一个GameObject上执行,所以您可以轻松地触发整个场景的效果,因为您可以修改一些GameObject。
应该称为RPC的方法必须在具有PhotonView组件的GameObject上。 该方法本身必须由属性[PunRPC]标记。
puN功能概述05.png
用该方法,访问目标对象的PhotonView。 调用PhotonView.RPC()而不是直接调用目标方法,并提供要调用的方法的名称:
puN功能概述06.png
您可以发送参数列表,但它必须与RPC方法的定义相匹配。
Timing for RPCs and Loading Levels  RPC和加载级别的时序
RPC在特定的PhotonViews上被调用,并且在接收客户端上始终将其匹配。如果远程客户端尚未加载或创建匹配的PhotonView,则RPC将丢失!
因此,丢失RPC的典型原因是客户端加载新场景时。它只需要一个客户端已经加载了一个新的GameObjects的场景,其他客户端不能理解这一个(直到他们也加载了相同的场景)。
PUN可以照顾。在连接并在房间的主客户端上使用PhotonNetwork.LoadLevel()之前,设置PhotonNetwork.automaticallySyncScene = true。这样,一个客户端定义所有客户端在房间/游戏中必须加载的级别。
为了防止丢失RPC,客户端可以停止执行传入的消息(这是LoadLevel为您做的)。当您获得RPC加载某些场景时,立即设置isMessageQueueRunning = false,直到内容被初始化为止。禁用消息队列将延迟传入和传出消息,直到队列解锁。显然,当您准备好继续时,解锁队列非常重要。
puN功能概述07.png
PUN基础知识完成了,下面写几篇实战项目,小伙伴们尽情期待,要是也对Photon感情可以私信我加个好友。


回复

使用道具 举报

排名
1708
昨日变化
2

50

主题

238

帖子

1723

积分

Rank: 9Rank: 9Rank: 9

UID
6728
好友
18
蛮牛币
6298
威望
0
注册时间
2013-10-30
在线时间
645 小时
最后登录
2018-5-23

专栏作家社区QQ达人

 楼主| 发表于 2017-10-14 09:52:35 | 显示全部楼层
小伙伴可以关注我微博和公众号 photonserver。加个好友,共同交流一下。

回复 支持 反对

使用道具 举报

4四处流浪
427/500
排名
7424
昨日变化
4

3

主题

206

帖子

427

积分

Rank: 4

UID
234982
好友
0
蛮牛币
1041
威望
0
注册时间
2017-7-30
在线时间
78 小时
最后登录
2017-12-5
发表于 2017-10-14 12:02:23 | 显示全部楼层
{:88:}{:88:}{:88:}{:88:}{:88:}{:88:}{:88:}{:88:}{:88:}{:88:}{:88:}

回复 支持 反对

使用道具 举报

5熟悉之中
547/1000
排名
4311
昨日变化
21

9

主题

87

帖子

547

积分

Rank: 5Rank: 5

UID
138674
好友
0
蛮牛币
623
威望
0
注册时间
2016-3-7
在线时间
155 小时
最后登录
2018-5-22
发表于 2017-10-14 23:00:16 | 显示全部楼层
期待案例讲解,  photon产品多的有点乱

回复 支持 反对

使用道具 举报

5熟悉之中
563/1000
排名
4234
昨日变化
2

1

主题

112

帖子

563

积分

Rank: 5Rank: 5

UID
79201
好友
0
蛮牛币
1333
威望
0
注册时间
2015-3-12
在线时间
144 小时
最后登录
2017-12-20
发表于 2017-10-15 09:51:20 | 显示全部楼层
6666666666666

回复

使用道具 举报

7日久生情
4048/5000
排名
3217
昨日变化
14

5

主题

3109

帖子

4048

积分

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

UID
209186
好友
5
蛮牛币
4907
威望
0
注册时间
2017-3-1
在线时间
530 小时
最后登录
2018-5-24
发表于 2017-10-16 09:24:32 | 显示全部楼层
不错,学习了

回复

使用道具 举报

排名
1708
昨日变化
2

50

主题

238

帖子

1723

积分

Rank: 9Rank: 9Rank: 9

UID
6728
好友
18
蛮牛币
6298
威望
0
注册时间
2013-10-30
在线时间
645 小时
最后登录
2018-5-23

专栏作家社区QQ达人

 楼主| 发表于 2017-10-16 10:54:05 | 显示全部楼层
zgbjmy2008 发表于 2017-10-14 23:00
期待案例讲解,  photon产品多的有点乱

恩恩 马上就来

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1111/1500
排名
3248
昨日变化
7

25

主题

338

帖子

1111

积分

Rank: 6Rank: 6Rank: 6

UID
194101
好友
6
蛮牛币
6827
威望
0
注册时间
2016-12-19
在线时间
376 小时
最后登录
2018-5-24
发表于 2017-11-3 17:40:37 | 显示全部楼层

回复

使用道具 举报

3偶尔光临
277/300
排名
16219
昨日变化
5

0

主题

203

帖子

277

积分

Rank: 3Rank: 3Rank: 3

UID
254038
好友
0
蛮牛币
180
威望
0
注册时间
2017-11-13
在线时间
38 小时
最后登录
2018-2-3
发表于 2017-12-2 10:19:37 | 显示全部楼层
66666666666666666666

回复 支持 反对

使用道具 举报

4四处流浪
451/500
排名
12065
昨日变化
9

3

主题

335

帖子

451

积分

Rank: 4

UID
184913
好友
0
蛮牛币
522
威望
0
注册时间
2016-11-18
在线时间
47 小时
最后登录
2018-2-20
发表于 2017-12-21 19:47:46 | 显示全部楼层
感谢分享教程

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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