Photon服务插件替换记录

本文探讨了在本地化Unity项目中,如何因国内网络和防作弊需求,决定移除Photon云服务,转向自建服务器进行消息转发。针对2D休闲游戏(A)和端游转手游项目(B),分别采取了不同的策略,以减少代码改动并确保游戏平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

海外项目很多游戏使用Photon云服务代替我们常用的游戏Server, 使用photon 可以不做服务器开发,只转发消息。 但是这个在国内却面临许多问题,比如网络支持不好,破解盗版等问题。所以我们需要拿掉photon走我们自己的服务器做消息转发。

背景:

我们项目是拿到海外项目做本地化二次开发的Unity项目。有手游,端游转手游等不同类型的。但是我们拿到这两个项目都有个共同点,都是使用的Photon做服务器。

https://www.photonengine.com/zh-CN/PUN

Photon优点:

Photon是比较成熟的商业网络服务,从MMO到FPS都有相关案例,支持2人~100人在同一个房间。组件式调用,灵活多变,添加快速简单,自己添加修改很快就可以成型上线跑。省去自己开发搭建服务器的过程,可随时方便拓展服务器等等,而且网上有很多资料分析和使用介绍。

在这里插入图片描述

图片来源: https://steven-net.medium.com/

Photon缺点:

首先是考虑到国内玩家防作弊,由于Photon是所有逻辑都写在客户端,客户端是比较容易破解的,虽然我们也使用了易盾加固,乐变,Anti-Cheat Toolkit 加密变量 等手段,可是上线以后还是被玩家使用各种工具开挂等操作,破坏游戏平衡和营收。还有就是上线后各种活动更新调整,使用自己的服务器也会更加灵活。另外Photon服务器在国内部分地区不是很稳定。玩家数据存储也得依赖第三方服务器,游戏使用Host模式的,不能避免主机顽家掉线弱网,改客户端内存等操作。 所以我们综合考虑,替换掉原有的Photon服务,改用我们自己开的服务可以更好的解决上述问题。

替换思路 :

由于Photon是在项目开发的各个地方都可能用到,对项目代码嵌入很深,势必会大量改动现有代码逻辑。但好在项目A是一款2D休闲游戏,Photon使用整体不复杂, 主要是使用的转发消息功能。项目B由于是端游3D项目改手游,代码体量相对较大,对Photon使用更多更频繁,所以经过综合评估后,决定加在Photon Client一个代理层 跟我们的服务通信, 原有的调用逻辑不动。

1.直接移除Photon插件的所有相关代码。模仿Photon的接口自己写一套跟服务器消息转发流程。

2.不移除插件,在Photon的框架基础上,添加代理层,好处是减少原有代码逻辑的改动。

1,项目A

完全删除photon插件,模拟photon 转发逻辑。

我们的服务器架构是使用的分布式全球同服微服务架构,所以整体上是逻辑分为两块,战斗外和战斗内。

战斗外使用战斗外逻辑使用Http+Json ,并带一个TCP+json的通知服,这块主要是玩家各类属性升级,活动信息等功能为主。

通过匹配服匹配后进入战斗服。

战斗内使用TCP+protobuf,进入战斗房间以后,为了不大幅改动原有战斗内代码。使用OPT消息来转发各类战斗内消息,这部分服务器还是主要模拟Photon做转发就好了。 战斗匹配到进房间,和结算走们自有的流程。

2,项目B

不移除插件,在photon的框架基础上,添加代理层。

在这里插入图片描述

这部分匹配和进房间流程和消息转发流程跟项目A差别不大。由于PUN Client插件是在Unity直接以源码形式呈现的,虽然有些接口不开放,但是我们可直接修改扩展,将一些接口暴露出来然后再用就好了。接下来主要是需要重写模拟Photon的消息转发RPC ,OnEvent,TransferOwnership.,PhotonView.IsMine, PhotonNetwork.IsMasterClient ,属性传递,序列化反序列化等问题一一处理掉。 这样我们就是实现了尽量少的改动原有代码逻辑,而替换的掉服务器的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值