Unity 2019下SOLAS 128 Mod开发:无法显示光标问题求助
针对你在Unity 2019.2.18下用BepInEx开发关卡编辑器时遇到的光标无法显示问题,除了你已尝试的方法,还有以下几个常见因素需要排查:
游戏全局Cursor管理的覆盖:很多游戏会有自己的Cursor控制脚本(比如单例
CursorManager),会在每帧或特定时机重置光标状态。你可以用Harmony钩子监听Cursor.visible或Cursor.lockState的修改操作,定位到覆盖你设置的代码;或者直接找到游戏的Cursor管理类,强制覆盖它的状态(比如在你的编辑器激活时禁用该类的更新逻辑)。自定义UI光标替代了系统光标:如果游戏用Image组件模拟自定义光标,通常会先隐藏系统光标。检查场景中是否有活跃的自定义光标UI,确保你的编辑器模式下要么启用该UI(如果需要用游戏的光标样式),要么直接关闭游戏的自定义光标逻辑,恢复系统光标显示。
新Input System的冲突:如果游戏使用Unity新Input System而非旧的Input Manager,仅设置
Cursor.visible可能无效,需要同时控制Input System的鼠标光标状态:using UnityEngine.InputSystem; // ... Mouse.current.cursorVisible = true; Mouse.current.WarpCursorPosition(Mouse.current.position.ReadValue()); // 确保光标位置更新全屏模式的强制隐藏:部分游戏在全屏独占模式下会强制隐藏系统光标。可以临时切换到窗口模式测试,或者通过代码修改全屏模式:
Screen.fullScreenMode = FullScreenMode.Windowed;渲染层级与Camera遮挡:如果你的编辑器UI在低层级Camera下渲染,可能被游戏主Camera的画面遮挡。调整编辑器UI所在Camera的
depth值,使其高于游戏主Camera;或者在编辑器激活时,让主Camera忽略UI层。Mod执行顺序问题:如果你的Mod代码执行在游戏隐藏光标逻辑之前,设置会被覆盖。可以通过
[BepInDependency]调整Mod加载顺序,或者用Harmony钩子在游戏的Start/Awake方法执行完成后,再触发你的光标设置逻辑。Unity 2019版本的特定Bug:Unity 2019.2存在一些光标相关的已知问题,比如显卡驱动兼容性导致设置不生效。可以尝试加载一个透明自定义光标来触发系统光标显示:
Texture2D blankCursor = new Texture2D(1, 1); blankCursor.SetPixel(0, 0, Color.clear); blankCursor.Apply(); Cursor.SetCursor(blankCursor, Vector2.zero, CursorMode.Auto); Cursor.visible = true; Cursor.lockState = CursorLockMode.None;游戏焦点处理逻辑:即使设置了
Application.runInBackground = false,游戏可能在窗口失去焦点时仍强制隐藏光标。可以钩子OnApplicationFocus方法,在窗口获得焦点时重新设置光标状态;或者直接禁用游戏的焦点相关光标控制代码。
内容的提问来源于stack exchange,提问作者Jace M

