代码之家  ›  专栏  ›  技术社区  ›  Z. Bagley

swift 4.2-cocoapods:添加和访问资源包中的scnassets

  •  2
  • Z. Bagley  · 技术社区  · 7 年前

    试图创造一种利用 .scnassets 文件夹。文件夹导入到 Resources 对children对象没有任何问题,但我找不到加载 DAE 文件进入 SCNScene . 据我所知,Xcode如何转换可能存在问题 DAE 进入之内 SCN 资产。

    PODSPEC 包括:

      s.resource_bundles = {
          'ARUtilsScenes' => ['ARUtils/Assets/ARScenes.scnassets']
       }
    

    正确加载 砷化物.scnassets 进入之内 资源 文件夹。我正在尝试在我的pod中加载一个场景(在pod中,而不是使用pod的项目,并尝试了多种方法):

    let arrowScene = SCNScene(named: "arrow.dae")

    let arrowScene = SCNScene(named: "Resources/ARScenes.scnassets/arrow.dae")

    let arrowScene = SCNScene(named: "arrow.dae", inDirectory: "Resources/ARScenes.scnassets", options: nil)

    我尝试过各种文件/文件夹名称,并且能够加载图像,但无法获取 DAE 加载为 侦察场景 . 我需要补充吗 XIB 文件到我的 资源捆绑包 或者有其他方法来确保 SCN资产 文件夹正确编译这些 DAE SCN 也可以将它们加载到 侦察场景 ?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Z. Bagley    7 年前

    假设 ZARKit 你的框架分布在椰子树中吗?

    .podspec 包括:

    s.resource_bundles = {
          'ARUtilsScenes' => ['ARUtils/Assets/ARScenes.scnassets']
       }
    

    那你应该这么做

    let bundle = Bundle(for: #Your Class#.self).
    let resourcePath = bundle.path(forResource: <#T##String?#>, ofType: <#T##String?#>)
    let resourceBundle = Bundle(path: resourcePath)
    
    let url = resourceBundle.url(forResource: "ARScenes.scnassets/<#YourResourceName-arrow#>", withExtension: "<#scn#>")
    let arrowScene = SCNScene(url: url)
    

    编辑:Z.Bagley

    接受了答案,但这是我使用的实际代码:

            // find bundle based on existing class in pod
            let frameworkBundle = Bundle(for: ARUtilsClass.self) //ARUtilsClass is an empty class, Pod is only extensions for existing classes
            // append the scenes bundle, scnassets, and scn/dae
            let arrowURL = frameworkBundle.resourceURL?.appendingPathComponent("ARUtilsScenes.bundle/ARScenes.scnassets/newArrow.scn")
            // create a node in parent
            var arrow = SCNNode()
            do {
                // get arrow scene from bundle
                let bundleArrowScene = try SCNScene(url: (arrowURL)!, options: nil)
                // add arrow node from scene
                arrow = bundleArrowScene.rootNode.childNode(withName: "arrow", recursively: true)!
            } catch {
                print("failed to find arrow resource")
            }
    
        2
  •  0
  •   Codermonk    7 年前

    从.scnassets文件夹访问.dae资产时,不需要在路径中包含“resources/”。

    例如: let arrowScene = SCNScene(named: "ARScenes.scnassets/arrow.dae")

    假设您的.scnassets文件夹被调用。

        3
  •  0
  •   Alexander Telegin Farooque Azam    7 年前

    苹果公司更新的构建系统引入了一个已知的bug,它导致资产目录的异步编译,使它们在最终构建中无法访问。有关参考,请参见 this thread 关于可可豆Github。这里列出了几个解决办法,但没有一个能保证结果,所以目前我们似乎不得不接受它。