用于游戏模拟器同步的联机.Net实现
Go to file
2024-07-05 11:30:21 +08:00
AxibugEmuOnline.Client Merge branch 'dev_basemynes' of http://git.axibug.com/sin365/AxibugEmuOnline into dev_basemynes 2024-07-05 11:25:16 +08:00
AxibugEmuOnline.Server/AxibugEmuOnline.Server 归档 2024-06-28 17:43:55 +08:00
Lib 归档 2024-06-28 17:43:55 +08:00
ProtobufCore 加协议 2024-07-04 17:39:47 +08:00
.gitignore mynes.core dll改代码 2024-07-03 15:40:13 +08:00
LICENSE Initial commit 2024-06-28 13:16:39 +08:00
README.md readme 2024-06-28 18:17:40 +08:00

AxibugEmuOnline

用于游戏模拟器同步的联机.Net实现

AxibugEmuOnline.Server 是服务端 .Net 8

AxibugEmuOnline.Client 是客户端 Unity

##就是一种联机方式的探索

验证了一下 把模拟器帧缓存 走公网同步,实现联机的另一种方式

云游戏,但是不是视频流的方式,是同步模拟器帧缓存,+GZIP压缩。NES这种低分辨率+颜色查找表的方式。画面传输只需要9k/s

##TODO

1.目前只同步了画面操作CMD同步还没做。

2.以及多用户自行创建房间,和玩家选择要加入的房间列表还没做。

##简述客户端逻辑:

Player1主机才跑模拟器实例然后Player1 会把渲染层的数据上报服务器。服务器广播。

Player2即二号手柄玩家不运行模拟器实例画面渲染来自网络同步的数据。

PS:场景中UNES Test的Inspector勾选Player1作为玩家1不勾选作为玩家2

*之前试过直接上报渲染层但是这样会有6w左右大小的uint[]

*初步优化之后采用只上报每一个像素对应颜色查找表的下标这样就是一个byte[]了

*PorotoBuf 传输使用的是bytes但是Porotbuff只会对数组里每一个byte进行位压缩整个byte[]不压缩。于是C#先GZIP压缩之后在扔给protobuf。对面再解压。超级马里奥最复杂的画面情况是9k每秒的样子/。

##引用

###本项目使用我自构建的HaoYueNet高性能网络库作为基础而开发

HaoYueNet-Github

HaoYueNet-自建Git站点

###模拟器内核

模拟器内核采用 Emulator.NES https://github.com/Xyene/Emulator.NES

这是一个单机的 NES模拟器C#实现,我在此基础上做修改

做帧缓,颜色查找下标缓存,做同步,加上网络库,并实现服务端。达到如上效果。