【问题标题】:SceneKit – Node with animated skeleton not movingSceneKit - 动画骨架不移动的节点
【发布时间】:2022-01-30 00:47:29
【问题描述】:

我有一个 SceneKit 应用程序,art.scnassets 文件夹中有 2 个 .scn 文件。项目附带的基础ship.scn,以及我自己添加的新文件orcIdle.scn

当我在这艘船上调用此代码时,它会正确移动它:

self.myScene = SCNScene(named: "art.scnassets/ship.scn")!
// Set the scene to the view
let ship = (myScene.rootNode.childNode(withName: "ship", recursively: false))!
ship.position = SCNVector3(0, 0, -5)
self.sceneView.scene = myScene

当我在我的 orcIdle 文件中调用相同的代码时,它会将 orc 准确地放置在 (0,0,0)

self.myScene = SCNScene(named: "art.scnassets/orcIdle.scn")!
// Set the scene to the view
let orc = (myScene.rootNode.childNode(withName: "orcIdle", recursively: false))!
orc.position = SCNVector3(0, 0, -5)
self.sceneView.scene = myScene      

文件节点截图如下:

这是 Xcode 包含在项目中的默认 ship 文件。

这是我的 orcIdle 文件。

如您所见,它是完全相同的代码,但有 1 个移动,而另一个则没有。此外,在图像的右上角,我可以在那里调整 Z 值。它适用于 .ship,但不适用于 .orcIdle。

这是规模问题吗?有什么想法吗?

这是一个新的屏幕截图,其中包含我能捕捉到的尽可能多的场景图。

【问题讨论】:

    标签: swift scenekit scnnode


    【解决方案1】:

    通常,您必须选择一个骨架的顶级层次结构(如root 节点)来移动几何体,因为它的网格已绑定到骨架。如果模型的骨架在层次结构中相当深,请使用.childNodes[x] 下标语法来获取所需的关节。

    但是基于您的.scn 文件的解决方案如下——创建一个topNode 对象并将rootLOD_Group 放入其中。

    所以你的代码应该是这样的:

    let scene = SCNScene(named: "art.scnassets/orcIdle.scn")!
        
    orc = scene.rootNode.childNode(withName: "topNode", recursively: true)!
        
    orc.position = SCNVector3(0,0,-20)
    

    【讨论】:

    • 在上方添加具有完整层次结构的新图像。我尝试调用“LOD_0”、“LOD_Group”和“root”和“pelvis”都不起作用...我需要调用骨盆、右脚和右手吗?
    • 以下无效:self.myScene = SCNScene(named: "art.scnassets/orcIdle.scn")! // 将场景设置为视图 let orc = (myScene.rootNode.childNode(withName: "root", recursive: false))! orc.position = SCNVector3(0, 0, -5)
    • 我让它工作了...我通过将 .dae 文件拖放到“entry.scn”中来加载文件,这会创建一个子“orcIdle.scn”。如果我保留这两个文件,并调用节点为“orc idle reference”的“entry.scn”,它就可以工作。
    • 让它工作。我发誓我以前试过。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2021-08-25
    • 2022-01-05
    • 2018-05-15
    • 2011-05-14
    • 2018-10-30
    相关资源
    最近更新 更多