我致力于将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个屏幕截图,其中包含错误信息,也许可以为您提供更多帮助。
如果您正在阅读本文,谢谢!
编辑: 这是我的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)
}
}
}
答案 0 :(得分:0)
这似乎是一个棘手的问题,这可能会有所帮助,请尝试以下方法:
在Unity编辑器->项目设置->播放器中,还有一个复选框选项称为“金属API验证”,您说过仅将Xcode选项设置为Disabled,也许需要禁用此选项也一样或两者结合的开/关。
而不是选择Metal和OpenGLES3,请尝试选中“ Auto Graphics API”复选框。在我的一个项目中,我将其保留为“手动”状态,但选择了“金属”,但在iOS上根本无法渲染,而是通过启用“自动”进行了修复。
在色域中,同时选择sRGB和P3宽色。 iPhone 7和更高版本的显示器均支持P3彩色。
希望这会有所帮助!