我正在使用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。当我试图通过其名称达到目标时,它不起作用,但不会引发任何类型的错误。
答案 0 :(得分:0)
您可以从.scnassets验证键名,就像下面的屏幕截图
@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!
}
请确保您没有下面的图像作为键(没有键的名称)
简而言之,您必须具有键名,并且必须在 forTargetNamed 参数
中正确拼写应该与上述情况完全一样:)