超数据世界重制进度 18/7如下:
昨天和今天正在学习 photon 连线技术,
以下是一些新学习的技术,做一下总结。
1.玩家断线时,一般情况服务器会将离线角色的拥有权转让给场景/房主, 重新连接后,
以往因为没有取回离线角色的拥有权,因此角色会一直返回坐标0,0. 无法控制。
了解原理之后, 可以在玩家断线后,如果马上重连,我会用脚本使重连玩家取回离线后角色的拥有权。
并且返回预设位置,这样的话,只是短时间断线就不会出现无法控制导致只能重开的情况,
可以提升组队服务器的稳定性。
2.需要取得离线角色的拥有权,必须将他的photonview 设置成 takeover,
然后再重连后使用 requestownership() 即可取回控制权。
3.若房间采用可以随时进入的模式,比如 村庄,
此时要确保每个玩家只拥有一个bufferrpc 发送,
bufferrpc = 每个新玩家/断线重连 后 都会接收一次的脚本命令。
比如 我进入村庄后 会发送所有人包括自己一个 生成角色的 bufferrpc,
当有新玩家进入时, 他就会发送自己的bufferrpc给其他现有玩家,以及接受现有玩家的bufferrpc。
从而达到最有效的随时进入刷新角色。
但如果玩家断线时,一般处理是完全删除它的bufferrpc 以及角色, 等他重连后再运行上面的操作,
但这种操作对cpu的压力比较大,如果同一房间一直有人断线, 其他玩家需要一直删除,生成删除生成,
会造成大量cpu负担,卡顿等等。
因此为了解决这个问题, 我特意花了几天时间研究, 村庄断线重连的功能,
在玩家断线后,角色会存在20秒时间,如果玩家在20秒内回来,
可以用2的方法,取回离线角色的控制权,
这样就不用删除再生成,大量提升效能,
但这边,如果玩家是断线重连后 的唯一id一般是不变的, 如果按照正常流程会取一个新的唯一id,
此时就会发生不同步的问题,因此,如果自己断线后, 重连时 角色还在,
第一步先清除自己所有的bufferrpc,第二步取得原本离线角色的唯一id,
把唯一id跟生成buffer发生给所有玩家。
其他玩家接收到buffer后,就会判断 有这个角色就不做任何事情,
如果没有这个角色就按照正常流程产生角色。
重复以上就可以达到村庄最有效的随时加入同步了, 但目前还有点问题, 我需要再学习修复,
我觉得研究这些,会提升组队的稳定性,所以花多点时间还是值得的
以上就是超数据世界重制进度 18/7相关内容。