我正在 SceneKit 中創建一些幾何圖形
SCNGeometry(sources: [vertexSource, normalSource], elements: [element])
但我不想將大量的源和元素保存到磁盤并在每次應用程式啟動時重新創建它們。
有沒有辦法將創建的物件作為 SCN 檔案保存到 iOS 應用程式的磁盤中。
uj5u.com熱心網友回復:
我認為按需資源可以解決這個問題:https : //developer.apple.com/library/archive/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/index.html
https://www.raywenderlich.com/520-on-demand-resources-in-ios-tutorial
uj5u.com熱心網友回復:
我認為這是有效的;
首先,您使用要保存為.scn檔案的物件保存場景
func saveScene(){
let sceneToSave = scnView.scene
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = documentsPath.appendingPathComponent( "test.scn")
scene2!.write(to: url, options: nil, delegate: nil, progressHandler: nil)
}
獲取您保存的物件;
func loadObject(){
let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = documentsPath.appendingPathComponent( "test.scn")
var testGeometry = try! SCNScene(url: url, options: nil).rootNode.childNode(withName: "testGeometry", recursively: true)?.geometry
}
uj5u.com熱心網友回復:
可以將物件(例如SCNGeometry實體)放入場景中,然后呼叫-[SCNScene writeToURL:options:delegate:progressHandler:]以將其保存在磁盤上。
或者,大多數 SceneKit 類都符合NSSecureCoding協議,這意味著它們可以單獨存檔(沒有場景)。
例如,您可以 [NSKeyedArchiver archivedDataWithRootObject:requiringSecureCoding:error:]將SCNGeometry實體作為根物件進行呼叫,您將獲得一個NSData可以呼叫的-writeToURL:options:error:.
事實上,這就是該-[SCNScene writeToURL:options:delegate:progressHandler:]方法在內部所做的,以場景為根物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405331.html
標籤:
