不可预知的SceneKit行为?

时间:2017-04-13 10:49:12

标签: xcode macos scenekit

我有一个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

1 个答案:

答案 0 :(得分:1)

我查看了DAE文件并发现所有骨骼都附有动画。添加新动画时这似乎是一个问题,但它们并不总是有效。 (不知道为什么它有时会起作用而不是其他人)。

您可以删除SceneKit编辑器中的所有动画,也可以从要设置动画的节点中以编程方式删除它们:

[headBone removeAllAnimations];