斯威夫特 - 无法按名称达到SCNMorpher目标

时间:2018-04-09 07:48:00

标签: ios swift scenekit

我正在使用SceneKit构建一个小动画应用。我在.scn文件中有一个3D模型,它有6个SCNMorpher目标(即blendShapes)。它们都是名为dinoNode的节点的所有属性。

我可以通过将节点打印到控制台行来列出节点的目标数组。 print(dinoNode.morpher?.targets)

我现在需要做的是为一个变形器的目标设定一定的重量:

dinoNode.morpher?.setWeight(jawOpenQ, forTargetNamed: "jawOpenMesh")

由于某些原因,这种方法不起作用。看来XCode无法找到名为" jawOpenMesh"的目标。但是,它列在索引4的目标数组中,我可以这样做:

dinoNode.morpher?.setWeight(jawOpenQ, forTargetAt: 4)

这样可行,但是当有30-40个变形目标时,通过索引到达目标会让人感到困惑。有人知道为什么以它的名字达到目标对我不起作用吗?

P.S。当我试图通过其名称达到目标时,它不起作用,但不会引发任何类型的错误。

1 个答案:

答案 0 :(得分:0)

您可以从.scnassets验证键名,就像下面的屏幕截图

Morph key name is "Key"

 @IBOutlet weak var scnView: SCNView!
var mainNode : SCNNode!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let scne = SCNScene(named: "scene.scnassets/ColladaTest_New.scn")

    self.scnView.scene = scne

    mainNode = self.getNodeByName(name: "CylinderWithSameGeometryAndMorpher")


    self.perform(#selector(self.performMorph), with: nil, afterDelay: 2.0)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@objc func performMorph()  {
     mainNode.morpher?.setWeight(1.5, forTargetNamed: "Key")
    //mainNode.morpher?.setWeight(1.5, forTargetAt: 0)
}

func getNodeByName(name:String) -> SCNNode {

   let node =  self.scnView.scene?.rootNode.childNode(withName: name, recursively: false)
    return node!
}

o / p将如下result morph

请确保您没有下面的图像作为键(没有键的名称)

enter image description here

简而言之,您必须具有键名,并且必须在 forTargetNamed 参数

中正确拼写

应该与上述情况完全一样:)