ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

一个游戏分屏工具让一台电脑同时跑两个游戏窗口?UniversalSplitScreen 本地多人玩法拆解

一个游戏分屏工具让一台电脑同时跑两个游戏窗口?UniversalSplitScreen 本地多人玩法拆解 一个游戏分屏工具让一台电脑同时跑两个游戏窗口UniversalSplitScreen 本地多人玩法拆解【免费下载链接】UniversalSplitScreenSplit screen multiplayer for any game with multiple keyboards, mice and controllers.项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreenPC 上想玩本地多人分屏大多数时候都得靠两台电脑或虚拟机而 UniversalSplitScreen 这款开源游戏分屏工具走的是另一条路它让同一个系统里的多个游戏实例各自拿到一套独立的输入设备玩家不用买第二台机器就能实现本地多人分屏。项目代码量不大、结构清晰对普通玩家友好对想研究输入重定向原理的开发者来说也很有参考价值。下面不聊虚的直接把它能做什么、怎么用、注意什么讲清楚。这套本地分屏方案到底解决了什么问题多数 PC 游戏在设计时只认一套鼠标键盘 一个前台窗口。就算你同时开两个游戏进程第二个窗口也收不到输入或者两个窗口抢同一个鼠标根本没法各玩各的。UniversalSplitScreen 的核心思路不是改游戏而是在 Windows 层面把输入流切开每个游戏窗口绑定指定的鼠标、键盘或手柄再把窗口排布到屏幕的不同区域模拟出一台电脑当两台用的效果。UniversalSplitScreen 的五个核心能力清单输入设备与游戏窗口一对一绑定支持多个键盘、多个鼠标以及多个手柄自动把游戏窗口平铺到屏幕左/右/上/下或四象限位置用可配置的注入钩子拦截常见输入 API兼容不同引擎为特定游戏提供现成的配置文件开箱即用内置停止键和解锁互斥锁等实用工具解决多开限制下面逐条展开。多键盘多鼠标输入分离是怎么做到的项目把输入处理放在UniversalSplitScreen/RawInput/目录。核心思路是注册 Windows 的原始输入Raw Input消息主程序能拿到这次鼠标/键盘事件来自哪个物理设备然后根据绑定关系把事件转发给对应的游戏窗口。值得一提的细节在RawInput/MessageProcessor.cs里鼠标左右键、中键、侧键的下压和抬起都会被翻译成标准的窗口消息再投递到对应游戏。也就是说即使游戏只认普通鼠标消息也能通过这套翻译层正常工作。窗口管理四象限平铺和一键复位Core/SplitScreenManager.cs中的MoveWindow方法负责窗口排布支持三种模式左右分屏、上下分屏、四象限分屏。每个位置都留了LeftOffset、TopOffset、ExtraHeight三个偏移参数方便微调边框对齐避免窗口被任务栏或屏幕边缘裁掉。开始分屏后主程序还会做几件小事把系统鼠标移到屏幕边缘、让所有游戏失去焦点但保持不最小化、启动自动失焦任务防止某个游戏抢前台。这些细节决定了实际体验是否流畅。现成的游戏配置文件都放在哪项目在UniversalSplitScreen/Config/目录里预置了一批 JSON 配置文件覆盖了不同引擎的典型场景例如Source Engine.json针对 Source 引擎系列启用了 XInput 钩子和互斥锁解锁Minecraft 1.14.3.json使用传统输入模式并打开绝对坐标标记修正Stardew Valley.json、Terraria.json、Factorio.json等每个 JSON 都是一份完整的输入方案包括是否发送原始输入、是否启用各类 API 钩子、窗口偏移量、停止键虚拟键值等。玩家可以直接套用也可以另存为新配置再改。钩子机制把不配合的游戏盘明白有些游戏会调用GetCursorPos、GetAsyncKeyState这类 API 自己拿输入绕过普通消息。项目为此准备了HooksCPP/和StartupHook/两个钩子组件通过 EasyHook 注入到游戏进程里把这类 API 的调用结果改写为绑定设备的数据。Config/OptionsStructure.cs里列出的钩子开关很直观比如Hook_GetCursorPos、Hook_XInput、Hook_FilterRawInput。多数情况下照抄对应游戏的配置文件就能跑只有遇到新游戏时才需要手动调整这些开关。一个容易踩的坑单实例游戏的互斥锁很多游戏为了防止多开会在启动时创建一个命名的互斥对象第二个实例检测到就自动退出。项目用SourceEngineUnlocker/组件专门处理这类锁在界面上点击Unlock即可解除然后从游戏 exe 直接启动第二个实例。Config 里的AutofillHandleName字段就是为这个功能预填的句柄名。如何从源码把工具跑起来项目使用 Visual Studio 解决方案管理各子项目都带.vcxproj。编译步骤大致如下git clone https://gitcode.com/gh_mirrors/un/UniversalSplitScreen这条命令只是把源码下载到本地和普通下载一样没有任何门槛。拿到代码后打开根目录的UniversalSplitScreen.sln用 Visual Studio 的批生成一次性编译全部项目。需要注意主程序和SourceEngineUnlocker用 x86 平台而HooksCPP、StartupHook需要 x86 和 x64 各一份编译产物会被自动重命名并拷贝到主程序目录例如HooksCPP32.dll、HooksCPP64.dll、StartupHook32.dll、StartupHook64.dll以及注入器IJx86.exe、IJx64.exe。常见问题速查问哪些游戏开箱即用答Config 目录里已适配的可以直接用没有配置的游戏先从最接近的引擎配置改起一般调几个钩子开关就能跑通。问最多能接几个手柄答XInput 通道默认支持 4 个手柄超过 4 个需要同时开启 DInput 到 XInput 的翻译钩子。问运行时报无法注入怎么办答先确认游戏位数与注入器位数一致再检查是否以管理员身份运行了主程序。问分屏时系统鼠标没反应是坏了吗答分屏期间系统输入会被整体锁定这是正常行为按设置的停止键默认 End即可退出分屏并恢复输入。快速上手建议如果你只想体验效果先挑一个 Config 里已有的游戏绑定两套键鼠点一下开始按钮观察窗口排布和输入切换比直接上手新游戏配置要稳妥得多。如果你对输入重定向感兴趣可以从RawInput/目录的原始输入监听开始读代码再对照SplitScreenManager看窗口与设备的绑定关系整个项目的脉络几分钟就能理清。想本地联机的玩家现在就可以拿到这份开源分屏工具接上你的备用键盘和鼠标试试看。【免费下载链接】UniversalSplitScreenSplit screen multiplayer for any game with multiple keyboards, mice and controllers.项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScreen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表