簡體   English   中英

SceneKit 添加地板崩潰

[英]SceneKit add floor crash

我在場景編輯中編輯。 第一個場景沒問題(場景包含地板)。 但是當我使用sceneView.present一個新的 SCNScene(它只包含一個 foor)崩潰。

原因 :

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()
   }
}

場景編輯崩潰原因

同意這是 SceneKit iOS 11 問題——我不記得在 iOS 11 之前版本的 iPad 上看到過這個問題。

請注意,這似乎不是 iPhone 的問題,只有 iPad(可能只是 iPad Air 2 - 因為這是我擁有的唯一物理 iPad 設備)。

我已經能夠確認 present:with 在某些情況下不適用於真正的 iPad(而不是模擬器)。 我還沒有完全弄清楚具體的場景(也許只有當你在場景中添加一個地板時)。

我推薦的解決方案是不要使用present:with(也許使用相機/燈光來模擬過渡,這就是我正在做的“淡入”過渡)。 您不需要使用present:with transition 來呈現您的場景。

例如,如果您從原始的 Apple SceneKit 模板開始,它就可以工作。 另外,您可以添加以下代碼,它仍然有效。 但是然后添加一個地板,它失敗了。

添加禮物:with(在scnView.scene=scene后直接添加這個)

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

注意:您必須在文件頂部添加“import SpriteKit”以支持 SKTransition。 在“ship.scn”中沒有“floor”元素的情況下,此轉換代碼不會在我的 iPad Air 2 上失敗(盡管它似乎沒有做任何事情)。

但是,當您將一個空的“地板”元素拖到“ship.scn”場景中並重新運行時,它會失敗並出現您上面提到的錯誤。 添加了地板的 SceneKit 模板

然后,注釋掉 present:with 代碼,它又可以工作了。

請注意,這在模擬器不會失敗,但在我的設備上會失敗。 我已將 iPad Air 2 更新到最新的 iOS (11.1) 並將部署目標設置為相同。

此外,present:with確實適用於我的 iPhone 6s 和 iOS 11.1。 所以這似乎只是 iPad 的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM