.dae 格式的3D模型的动画大战

 最近在看利用Scenekit显示3D模型,选用了自带动画的模型。需求是要求能自己控制模型的动画。

.dae格式模型在加载后如果有动画,会自动加载模型动画,永久重复。

一、移除动画

想要控制模型的动画就要先将自身的动画移除,因为不知道会在那个子节点带有动画,所以排除掉一层一层过滤带动画节点的方式。挣扎好久终于找出了方法:

//移除模型自带的动画效果

    NSArray *allNodes = [sceneSource identifiersOfEntriesWithClass:[SCNNode class]];

    for (NSString *nodeName in allNodes) {

        SCNNode *nodeKey = [sceneSource entryWithIdentifier:nodeName withClass:[SCNNode class]];

        [nodeKey removeAllAnimations];

    }


 先找到模型中的所有节点的名字,再通过方法找到节点,移除节点所带有的动画。

二、添加动画

要添加动画其实很容易,获取到动画数据,就可以直接添加到模型上了。

NSArray *animationIDs = [sceneSource identifiersOfEntriesWithClass:[CAAnimation class]];

    NSUInteger animationCount = [animationIDs count];

    NSMutableArray *longAnimations = [[NSMutableArray alloc]initWithCapacity:animationCount];

    CFTimeInterval maxDuration = 0;

    for (NSInteger index = 0; index<animationCount; index++) {

       CAAnimation *animation = [sceneSource entryWithIdentifier:animationIDs[index] withClass:[CAAnimation class]];

        if (animation) {

            maxDuration = animation.duration;

            [longAnimations addObject:animation];

        }

    }

    CAAnimationGroup *animationGroup = [CAAnimationGroup animation];

    animationGroup.animations = longAnimations;

    animationGroup.duration = duration;

    animationGroup.repeatCount = repeat;

   [node addAnimation:animationGroup forKey:@"animation"];



如果需要指定哪个动画,根据动画id直接获取即可。
发布了5 篇原创文章 · 获赞 2 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览