三套键鼠共用一个屏幕?Universal Split Screen 本地分屏实测:从拿到源码到顺利开黑
三套键鼠共用一个屏幕?Universal Split Screen 本地分屏实测:从拿到源码到顺利开黑
【免费下载链接】UniversalSplitScreenSplit screen multiplayer for any game with multiple keyboards, mice and controllers.项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreen
上个周末,两个朋友拎着手柄和键盘来我家,点名要一起玩《泰拉瑞亚》。问题来了:家里只有一台电脑,三个人,三套输入设备,游戏却只认一套键鼠。那晚我折腾到凌晨,也由此摸清了一件事——想在一台 PC 上实现本地多人分屏,Universal Split Screen是当下最省心的开源解法。这篇就讲讲我怎么从零把它跑起来,以及过程中踩过的坑。
本地多人为什么这么难
先说清楚痛点在哪。市面上绝大多数 PC 游戏在设计时就默认"一台电脑 = 一个人":
- 键盘输入只有一个,鼠标指针只有一个
- 游戏引擎通常只接受一个主输入焦点
- 很多游戏对窗口化运行都有各种限制,更别提同时开多个实例
所以传统的"本地多人"玩法往往很憋屈:要么一人玩、其他人围观,要么几个人挤在一套键鼠前轮流操作。想在一台电脑上让每个人都握住自己的键鼠、各玩各的角色,游戏本身是做不到的,必须借助外部工具来"架空"它的输入层。
Universal Split Screen 做了什么
简单说,它做的事可以概括成两句话:
- 把窗口切成小块,让每个玩家各占一席,支持同屏分割,也支持多显示器各显各的;
- 把输入按设备隔离,你按下键盘 A,只有属于你这套键鼠的游戏窗口能收到,鼠标同理,手柄也是独立通道。
换句话说,它不是在游戏里打补丁,而是站在系统层面帮你"翻译"输入信号——这正是它号称"any game"都能用的底气。真正有意思的是它连游戏的窗口焦点都做了处理:普通游戏往往要求窗口必须在前台才能收到按键,它通过注入钩子把这类限制一起绕开了,细节都写在UniversalSplitScreen/目录下的各个子模块里。
上手第一步:把项目跑起来
项目本体是 Visual Studio 的解决方案,获取方式很简单:
git clone https://gitcode.com/gh_mirrors/un/UniversalSplitScreen然后打开根目录的UniversalSplitScreen.sln。需要说明的是,整套工具不是单文件程序,而是由几个模块协作的:
- UniversalSplitScreen:主程序,负责界面和分屏调度
- InjectorLoader:把钩子注入游戏进程的加载器
- HooksCPP与StartupHook:负责实际拦截和转发输入的 DLL
- SourceEngineUnlocker:专为 Source 引擎游戏准备的解锁模块
编译时记得在 Visual Studio 里用Batch Build,一次性把全部项目编出来。编译完把各个 DLL 按项目里的后置脚本自动拷贝到主程序目录即可。我第一次只编了主程序,结果注入器缺 DLL 直接报错,这点务必注意。
实测配置:以《星露谷物语》为例
项目自带了十来个流行游戏的现成配置,放在UniversalSplitScreen/Config目录下,比如《泰拉瑞亚》《星露谷物语》《我的世界》都有,基本都是 JSON 文件,直接能导入。我的配置流程如下:
- 开两份游戏:先启动两个游戏实例,各自以窗口模式运行;
- 创建分屏窗口:在主程序里添加两个窗口,拖拽到屏幕的左右两侧,各占一半;
- 绑定设备:把第一套键鼠指向窗口 A,第二套指向窗口 B;
- 载入配置:导入
Config下对应游戏的 JSON,比如星露谷就选Stardew Valley.json; - 启动注入:点击注入按钮,让两个游戏窗口各自"认领"自己的输入设备。
整个过程没有写一行代码,全靠界面点点点。每份 JSON 里都是一堆开关,比如SendRawMouseInput、Hook_XInput、DrawMouse之类,说白了就是告诉系统"哪些输入要走钩子、哪些直接放行"。普通玩家用默认值就行,遇到问题再去调整对应项。
效果验证:三个人真的能各玩各的
实践结果是喜人的。配置好之后,三个人的光标互不干扰,键盘各按各的,游戏里也能正常打开菜单、拾取物品、对话。那种"三个人挤在同一张桌子上抢鼠标"的画面彻底消失了,客厅一下变成了小型网吧。
不过也要说句公道话:它并非对所有游戏都零门槛。能不能顺利分屏,很大程度取决于游戏对窗口焦点和输入 API 的敏感度。越老派、越"单机化"的游戏越好处理,反作弊较强的联网游戏基本无解——这不是工具的问题,而是游戏自身在屏蔽多开。
新手避坑清单
把这几条记下来,能省掉大半晚上的折腾:
- 窗口模式是前提:全屏独占模式下分屏无从谈起,先在游戏里切到窗口化;
- 编译要用 x86:README 里明确写了主程序要在 x86 下编译,别手滑选了 AnyCPU;
- 配置选错了会"串台":两台游戏如果绑定了同一套键鼠,输入会互相干扰,务必一一对应;
- 焦点被抢是常见病:游戏窗口偶尔会主动抢前台焦点导致输入失灵,主程序会自动定期把焦点还给桌面来规避,耐心等几秒即可;
- 手柄玩家别忘开 XInput 钩子:如果控制器没反应,检查对应 JSON 里的
Hook_XInput是否为 true。
结语
从"三个人面面相觑"到"三个角色在同一个世界里并肩作战",中间差的不过是一个 Universal Split Screen。它把PC 游戏本地多人分屏这件事的门槛拉到了"会点鼠标就能配"的程度,而且完全免费开源。如果你的愿望清单里恰好躺着几款"买了却因为没人陪而吃灰"的游戏,不妨趁这个周末,把朋友叫到家里来,用三套键鼠重新打开它。现在就动手试试,你离快乐只差一个 clone 的距离。🎮
【免费下载链接】UniversalSplitScreenSplit screen multiplayer for any game with multiple keyboards, mice and controllers.项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreen
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
