我有一个SceneKit SCNSceneRendererDelegate,它实现了以下方法:
- (void) renderer:(id<SCNSceneRenderer>)renderer
didRenderScene:(SCNScene*)scene
atTime:(NSTimeInterval)time
{
static NSUInteger counter = 0 ;
counter++ ;
// Rotate via animation
if (counter==1)
{
SCNNode *man = [scene.rootNode childNodeWithName:@"Man" recursively:YES] ;
SCNNode *headBone = [man childNodeWithName:@"mixamorig_Head" recursively:YES] ;
CABasicAnimation *animation1 = [CABasicAnimation animationWithKeyPath:@"rotation"] ;
animation1.fromValue = [NSValue valueWithSCNVector4:headBone.rotation] ;
animation1.toValue = [NSValue valueWithSCNVector4:SCNVector4Make(0,1,0,M_PI_4)] ;
animation1.duration = 1.2 ;
animation1.fillMode = kCAFillModeForwards ;
animation1.removedOnCompletion = NO ;
[headBone addAnimation:animation1 forKey:@"rotationAnimation"] ;
}
}
显然,这只是将名为“mixamorig_Head”的骨骼旋转45度。
当我运行程序时,我实际上可以看到头部旋转...... 只有一次。
我唯一要做的就是点击XCode的运行按钮。程序启动并显示场景,头部旋转......或不旋转。运行之间没有代码更新,只需单击运行按钮。
我试图记录每个变量,一切似乎都正确。
任何想法为什么SceneKit行为可能会因为一次运行而不同?
修改 上传演示项目here。
答案 0 :(得分:1)
我查看了DAE文件并发现所有骨骼都附有动画。添加新动画时这似乎是一个问题,但它们并不总是有效。 (不知道为什么它有时会起作用而不是其他人)。
您可以删除SceneKit编辑器中的所有动画,也可以从要设置动画的节点中以编程方式删除它们:
[headBone removeAllAnimations];