[英]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”場景中並重新運行時,它會失敗並出現您上面提到的錯誤。
然后,注釋掉 present:with 代碼,它又可以工作了。
請注意,這在模擬器上不會失敗,但在我的設備上會失敗。 我已將 iPad Air 2 更新到最新的 iOS (11.1) 並將部署目標設置為相同。
此外,present:with確實適用於我的 iPhone 6s 和 iOS 11.1。 所以這似乎只是 iPad 的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.