1台电脑4个玩家:Universal Split Screen 免费开源PC游戏分屏上手
【免费下载链接】UniversalSplitScreenSplit screen multiplayer for any game with multiple keyboards, mice and controllers.项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreen
Universal Split Screen 是一款免费开源的 PC 游戏分屏工具,把只支持单人的 PC 游戏改造成多人同屏的本地多人体验,多套键盘、鼠标和手柄可以同时接入一台电脑。它不用你多买一台主机,也不用加任何付费硬件,编译好就能用。
一图看懂:这个免费开源分屏工具能干什么
不逐条念功能,直接看它对玩家的意义:
| 能力 | 对玩家意味着什么 |
|---|---|
| 识别多套输入设备 | 两人的键鼠各干各的,互不串键 |
| 把画面切分成多块 | 两人或四人共享一屏,各自独立视角 |
| 预置主流游戏配置 | Minecraft、Terraria 等选一下就能用 |
| 手柄与键盘混接 | 一人拿手柄、一人用键鼠,不用重绑 |
| 免费、代码公开 | 自己编译、自己改参数,无费用 |
从拉取代码到跑起第一局:编译与配置三步
第一步,把仓库拉到本地:
git clone https://gitcode.com/gh_mirrors/un/UniversalSplitScreen第二步,用 Visual Studio 打开 UniversalSplitScreen.sln,按依赖顺序编译:
- 主程序 UniversalSplitScreen:只编 x86;
- 输入钩子 HooksCPP:x86 与 x64 各编一遍,得到 HooksCPP32.dll 和 HooksCPP64.dll;
- 注入器 InjectorLoader:x86 与 x64,得到 IJx86.exe 和 IJx64.exe;
- 启动钩子 StartupHook:x86 与 x64,得到 StartupHook32.dll 和 StartupHook64.dll。
构建后步骤会自动把产物改名并拷进主程序目录;Source Engine 游戏另需 x86 的 SourceEngineUnlocker。
第三步,载入预置配置。预置配置放在 Config/ 目录,Minecraft、Terraria、Source Engine 等游戏都有现成 JSON,启动主程序后在下拉框选中即可。
它凭什么做到:三块机制三分钟看懂
机制部分不贴代码,只说结论。
输入分离:手柄键盘混用时各认各的窗口
原始输入模块(RawInput/ 目录)在设备被系统首次上报时记下它的身份。之后每次按键、每次移动,程序都清楚它属于哪套设备,只转发给对应窗口。你按 W,不会替朋友的角色挪一步。
进程注入钩子:不改游戏,只改它读到的结果
注入器会把一个很小的 DLL 送进游戏进程,这一步由 HooksCPP 和 StartupHook 完成。DLL 落地后拦截游戏常调用的查询,比如"前台窗口是哪个""鼠标现在在哪",并返回被服务玩家对应的答案。游戏以为自己还是正常单人局。
窗口布局:切好屏幕并锁住位置
窗口管理把游戏窗口挪到指定位置、切成目标尺寸,还能关边框、锁位置,防止游戏自己跳回全屏。每个玩家的画面固定在自己那块区域里。
给《我的世界》配上分屏:一份精简 JSON 配置
Minecraft 适合当例子:原版只认一个玩家,画面里只有一个视角。仓库带了 1.14.3 的预置配置,关键字段如下:
{ "OptionsName": "Minecraft 1.14.3", "SendNormalMouseInput": true, "SendNormalKeyboardInput": true, "SendScrollwheel": true, "SendWM_ACTIVATE": true, "Hook_GetForegroundWindow": true, "Hook_GetCursorPos": true, "Hook_SetCursorPos": true, "Hook_GetAsyncKeyState": true, "Hook_XInput": false, "DrawMouse": true, "Hook_UseLegacyInput": true, "EndVKey": 35 }| 字段 | 含义 |
|---|---|
| SendNormalMouseInput / SendNormalKeyboardInput | 走标准消息通道转发鼠标和键盘,通常开着 |
| Hook_GetForegroundWindow / Hook_GetCursorPos | 拦截游戏对当前窗口和鼠标位置的查询 |
| DrawMouse | 在窗口上画指针,每个玩家看得到自己指着哪 |
| EndVKey | 键盘键码上界,决定键盘如何在多玩家间切分 |
选中这份配置后,把已运行的 Minecraft 窗口纳入管理,按玩家数切分屏幕,第二块视角就出来了。
多人同屏更顺滑的调优清单
- 手柄与键盘混用时,打开配置里的 Hook_XInput,并按玩家分别设置控制器序号
- 键鼠尽量插在不同 USB 口,确认没被其他输入类软件占用
- 多显示器布局用扩展模式,把窗口拖到副屏边缘;同屏玩法留在主屏
- 降低输入延迟:关掉 Windows 游戏模式和第三方覆盖层
- 帧数吃紧先降游戏内画质,再考虑减少同屏窗口数
- 主程序保持 x86,钩子 DLL 按游戏进程的 32/64 位配对
踩坑速查:现象、原因、处理办法
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
| 新插键鼠不出现在列表 | 驱动没就绪或被其他程序占用 | 重插 USB,关掉占用程序后刷新识别 |
| 分屏后明显掉帧 | 多窗口同分辨率,渲染压力叠加 | 先降游戏画质,再减少同屏窗口数 |
| 配置不生效 | JSON 不在配置目录,或保存后没重新载入 | 确认文件在 Config/ 目录,重启主程序重选 |
| 两人的鼠标一起动 | 输入没分离,走了同一个通道 | 检查输入分离开关,确认硬件各自独立 |
社区与后续
欢迎提交 Issue 反馈问题、用 PR 贡献代码,或把自己的游戏配置发到仓库共享。后续计划加入更多游戏预置配置与图形化配置界面。
下一步很简单:把第二副手柄或第二套键鼠插上电脑,编译出主程序,先挑一个有预置配置的游戏试一局。跑通之后,再给没配置的游戏建一个属于自己的 JSON。
【免费下载链接】UniversalSplitScreenSplit screen multiplayer for any game with multiple keyboards, mice and controllers.项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreen
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考