iOS の SceneKit で、ローカルストレージにダウンロードした Scene ファイル (scn) をロードしたら失敗してしまいました。下記の3パターンすべてです。
// Scene としてロード
let scene = try SCNScene(url: sceneFileURL, options: nil)
// Node としてロード
if let referenceNode = SCNReferenceNode(url: sceneFileURL) {
referenceNode.load()
}
// Scene Source としてロード
let sceneSource = SCNSceneSource(url: sceneFileURL, options: nil)
こちらがコンソールに出力されたエラーログです。
[SceneKit] Error: This file cannot be opened (version is too old)
バージョンが古すぎる
そんなはずはない!
散々悩まされた結果、ファイルに .scn
拡張子がついていないとロードできないということがわかりました。(ダウンロードしたファイルを管理上の都合で拡張子なしで保存していたのです。)
下記のように一旦 Data
として読み込んでそれを入力とすると読み込めるので、拡張子のチェックなんてしなくて良いのに
let sceneData = try Data(contentsOf: sceneFileURL)
let sceneSource = SCNSceneSource(data: sceneData, options: nil)
(動作確認環境: iOS 12.2)