You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

push跳转后GCVirtualController搭配SKScene使用被遮挡问题求助

问题结论

GCVirtualController完全支持和SKScene搭配使用,你遇到的遮挡问题是push跳转场景下的系统视图层级加载顺序异常导致的,和SKScene本身无关。

问题根因

  • 直接启动App进入GameViewController时,GameViewController是window的根视图控制器,系统唤起GCVirtualController时会默认将其添加到当前最顶层视图上,不会被遮挡。
  • 从其他ViewController push跳转进入时,SKScene的didMove(to view:)方法触发时机早于GameViewController完全加载到window上的时机,系统会将GCVirtualController添加到尚未完全提交到顶层的视图层级中,最终被后续渲染的SKView子节点或者ViewController的过渡视图遮挡。

修复方案

步骤1:将虚拟控制器初始化逻辑转移到GameViewController中,修改触发时机为viewDidAppear

class GameViewController: UIViewController {
    private var virtualController: GCVirtualController?
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // 确保SKScene已经加载完成
        guard let skView = self.view as? SKView, skView.scene != nil else { return }
        
        // 初始化虚拟控制器
        let virtualConfig = GCVirtualController.Configuration()
        virtualConfig.elements = [GCInputLeftThumbstick, GCInputRightThumbstick, GCInputButtonA, GCInputButtonB]
        virtualController = GCVirtualController(configuration: virtualConfig)
        virtualController?.connect()
        
        // 主动将虚拟控制器视图移到最顶层,彻底避免遮挡
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
            guard let window = self?.view.window else { return }
            for subview in window.subviews {
                if NSStringFromClass(type(of: subview)).contains("GCVirtualControllerView") {
                    window.bringSubviewToFront(subview)
                    break
                }
            }
        }
    }
    
    // 页面销毁时断开虚拟控制器避免内存泄漏
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        virtualController?.disconnect()
        virtualController = nil
    }
}

步骤2:移除SKScene中原有虚拟控制器相关代码

SKScene只需要保留游戏逻辑即可,不需要持有虚拟控制器实例。如果需要在SKScene中响应虚拟控制器输入,可通过NotificationCenter或者代理回调的方式,将GameViewController中接收到的输入事件传递给SKScene处理。

内容的提问来源于stack exchange,提问作者originalmyth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:18:00