运行Xcode项目时如何修复IUnityGraphicsMetal错误

时间:2018-08-23 10:48:51

标签: ios swift xcode unity3d augmented-reality

我致力于将Unity的惊人AR模型集成到Swift 4中。 我终于使用Unity 2018(2018.2.4版本)和Swift 4.1(Xcode 9.4.1)做到了,但是当我在设备(iPhone 7 Plus)上运行项目时,它崩溃了,并且错误来自路径{{1} } 错误是:MyProjectName/Unity/Classes/Unity/IUnityGraphicsMetal.h。 我从Unity导出了项目,选择了Graphics API作为Metal,也选择了OpenGLES3,但这都没有帮助我。 同样在XCode->编辑方案->运行->选项选项卡->金属API验证->我将此设置为“已禁用”,但仍然收到相同的错误。 我还将ARKit插件(在Unity中)更新为最新版本(1.5),希望可以解决UnityGraphicsMetal的问题,但显然不能解决。 谁能帮助我解决此错误或将我引向正确的方向? 在这里,我有3个屏幕截图,其中包含错误信息,也许可以为您提供更多帮助。

Error1

Error2

IUnityGraphicsMetal

如果您正在阅读本文,谢谢!

编辑: 这是我的ViewController的源代码,它正在管理Swift和Unity之间的桥梁:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)

这是AppDelegate文件:

import UIKit

class ViewController: UIViewController {
    @IBOutlet var rotateSwitch: UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()
        if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
            appDelegate.startUnity()

            NotificationCenter.default.addObserver(self, selector: #selector(handleUnityReady), name: NSNotification.Name("UnityReady"), object: nil)
            NotificationCenter.default.addObserver(self, selector: #selector(handleUnityToggleRotation(_:)), name: NSNotification.Name("UnityToggleRotation"), object: nil)
        }
    }

    @objc func handleUnityReady() {
        showUnitySubView()
    }

    @objc func handleUnityToggleRotation(_ n: NSNotification) {
        if let isOn = n.userInfo?["isOn"] as? NSNumber {
            rotateSwitch.isOn = isOn.boolValue
        }
    }

    @IBAction func handleSwitchValueChanged(sender: UISwitch) {
        UnityPostMessage("NATIVE_BRIDGE", "PlayHologram", sender.isOn ? "start" : "stop")
    }

    func showUnitySubView() {
        if let unityView = UnityGetGLView() {
            // insert subview at index 0 ensures unity view is behind current UI view
            view?.insertSubview(unityView, at: 0)

            unityView.translatesAutoresizingMaskIntoConstraints = false
            let views = ["view": unityView]
            let w = NSLayoutConstraint.constraints(withVisualFormat: "|-0-[view]-0-|", options: [], metrics: nil, views: views)
            let h = NSLayoutConstraint.constraints(withVisualFormat: "V:|-75-[view]-0-|", options: [], metrics: nil, views: views)
            view.addConstraints(w + h)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这似乎是一个棘手的问题,这可能会有所帮助,请尝试以下方法:

  • 在Unity编辑器->项目设置->播放器中,还有一个复选框选项称为“金属API验证”,您说过仅将Xcode选项设置为Disabled,也许需要禁用此选项也一样或两者结合的开/关。

  • 而不是选择Metal和OpenGLES3,请尝试选中“ Auto Graphics API”复选框。在我的一个项目中,我将其保留为“手动”状态,但选择了“金属”,但在iOS上根本无法渲染,而是通过启用“自动”进行了修复。

  • 在色域中,同时选择sRGB和P3宽色。 iPhone 7和更高版本的显示器均支持P3彩色。

希望这会有所帮助!