2017-10-15 122 views
0

我在场景编辑中编辑。第一场景没有问题(场景包含一层楼)。但是当我使用sceneView.present一个新的SCNScene(它只包含一个foor)崩溃。SceneKit add floor crash

原因:

validateAttachmentOnDevice:313: failed assertion `MTLRenderPassDescriptor 
MTLStoreActionMultisampleResolve store action for the depth attachment is not 
supported by device' 
func startGame() { 
    let transition = SKTransition.doorsOpenVertical(withDuration: 1) 
    sceneView.present(TestScene().scene, with: transition, incomingPointOfView: nil) { 

    } 
} 
class TestScene : NSObject { 
    var scene = Assets.scene(named: "scene_2.scn") 
    override init() { 
     super.init() 
    } 
} 

scene edit crash reason

+0

查找原因。所有关于ARKit,但我不使用它。 –

+0

用飞机替换地板 –

+1

将SCNView的抗锯齿模式更改为.multisampling4X –

回答

0

一致认为,这是一个SceneKit iOS的11问题 - 我不记得在前期的iOS 11建立在我的iPad见状。

请注意,这似乎不是与iPhone的问题,只有iPad(可能只是iPad Air 2 - 因为这是我拥有的唯一的物理iPad设备)。

我已经能够确认目前:在某些情况下,与真正的iPad(而不是模拟器)无效。我还没有完全弄清楚具体的情况(也许只有当你添加一个场景到你的场景时)。

我推荐的解决方案不是使用present:with(也许用camera/lighting来模拟一个转换,这就是我在做一个“淡入”转换的过程)。你不需要使用礼物:用过渡来呈现你的场景。

例如,如果您从原始Apple SceneKit模板开始工作。另外,你可以添加下面的代码,它仍然有效。但是,然后添加一个地板,并失败。

添加礼物:用(添加此之后直接scnView.scene =场景)

let sceneTransition = SKTransition.fade(withDuration: 4.0) 
scnView.present(scene, 
       with: sceneTransition, 
       incomingPointOfView: nil, 
       completionHandler: nil) 

注意:你必须在支持SKTransition文件的顶部添加“导入SpriteKit”。在我的iPad Air 2上没有“ship.scn”中的“floor”元素的情况下,这种转换代码不会失效(尽管它似乎没有任何作用)。

但是,当您将一个空的“floor”元素拖到“ship.scn”场景中,然后重新运行时,它会因上面提到的错误而失败。 SceneKit template with floor added

然后,注释掉现在:用代码,它再次运行。

方注意这并没有失败模拟器,但它并不能我的设备上。我已将iPad Air 2更新为最新iOS(11.1),并将部署目标设置为相同。

另外,现在:与确实工作在我的iPhone 6s与iOS 11.1。所以这似乎只是一个iPad问题。

+0

谢谢。我会测试。 –