2017-10-15 118 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

謝謝。我會測試。 –