精华内容
下载资源
问答
  • Facebook POP 动效引擎

    2015-08-12 14:53:00
    使用CocoaPods安装POP,只...Custom(自定义)动效可以让设计值创建自定义动效,只需简单处理CADisplayLink,并联系时间-运动关系 在这片简短教程中将不涵盖自定义动效,大家可以看看POP的Github来获取更多进阶知识 ...

    使用CocoaPods安装POP,只需要在Podfile中加入这么一行:

    pod 'pop'
    或者如果想要手动添加,那么参考POP Github中的描述:
    除此之外,你还可以将工程添加到工作区里面,然后采用提供的配制文件。或者手动复制POP子目录下的文件,复制到工程里面。如果选择手动安装,确保C++标准库链入其中,只需要在项目链接标记中包含 -lc++即可。

    Facebook POP动效库:https://github.com/facebook/pop

    步骤2: 将POP加入到工程中

    在工程开头添加如下:

    #import <POP/POP.h>

    步骤 3:创建动效

    使用POP可以创建4类动效:: spring, decay, basic and custom.

    Spring (弹性)动效可以赋予物体愉悦的弹性效果
    POPSpringAnimation *anim = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds];
    Decay (衰减) 动效可以用来逐渐减慢物体的速度至停止
    POPDecayAnimation *anim = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
    Basic(基本)动效可以在给定时间的运动中插入数值调整运动节奏
    POPBasicAnimation *anim = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];
    Custom(自定义)动效可以让设计值创建自定义动效,只需简单处理CADisplayLink,并联系时间-运动关系

    在这片简短教程中将不涵盖自定义动效,大家可以看看POP的Github来获取更多进阶知识https://github.com/facebook/pop

    步骤4: 给动效添加属性

    Pop 让我们可以这样设置动效的属性:

    velocity : anim.velocity @(1000.);

    fromValue: anim.fromValue @(0.0);

    toValue: anim.toValue @(1.0);

    bounciness: anim.springBounciness 10;

    步骤5 :动起来

    若想让物体动起来,只需要添加步骤3所创建的东西到视图。

    [self.yourView.layer pop_addAnimation:anim forKey:@"typeANameForYourAnimationHere"];

    # 动效案例

    弹性动画
    - (void)spring{
        POPSpringAnimation* framePOP = [POPSpringAnimation animationWithPropertyNamed:kPOPViewBackgroundColor];
        framePOP.springSpeed = 10.f;
        framePOP.springBounciness = 4.f;
        framePOP.toValue =  [UIColor greenColor];
        [framePOP setCompletionBlock:^(POPAnimation * anim , BOOL finsih) {
            if (finsih) {
                NSLog(@"view.frame = %@",NSStringFromCGRect(view.frame));
            }
        }];
        [view pop_addAnimation:framePOP forKey:@"go"];
    }
    
    减缓动画
    - (void)Decay{
        POPDecayAnimation* decay = [POPDecayAnimation animationWithPropertyNamed:kPOPViewFrame];
    //    decay.toValue = [NSValue valueWithCGRect:CGRectMake(200, 400, 100, 100)];
        decay.velocity = [NSValue valueWithCGRect:CGRectMake(200, 300, 100, 100)];
        [view pop_addAnimation:decay forKey:@"go"];
    }
    
    基本动画
    -(void)basic{
        POPBasicAnimation* basicAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerCornerRadius];
        basicAnimation.toValue = [NSNumber numberWithFloat:CGRectGetHeight(view.frame)/2.];
        basicAnimation.timingFunction =[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    //    basicAnimation.duration = 3.f;
        [basicAnimation setCompletionBlock:^(POPAnimation * ani, BOOL fin) {
            if (fin) {
                NSLog(@"view.frame = %@",NSStringFromCGRect(view.frame));
    //            POPBasicAnimation* newBasic = [POPBasicAnimation easeInEaseOutAnimation];
    //            newBasic.property = [POPAnimatableProperty propertyWithName:kPOPLayerCornerRadius];
    //            newBasic.toValue = [NSNumber numberWithFloat:0];
    //            [view.layer pop_addAnimation:newBasic forKey:@"go"];
            }
        }];
    
        [view.layer pop_addAnimation:basicAnimation forKey:@"frameChange"];
    }
    
    
    组合动画
    -(void)group
    {
        view.transform = CGAffineTransformMakeRotation(M_PI_2/3);
        POPBasicAnimation* spring = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPositionY];
        spring.beginTime = CACurrentMediaTime();
        spring.duration = .4f;
        spring.fromValue = [NSNumber numberWithFloat:-100.f];
        spring.toValue = [NSNumber numberWithFloat:CGRectGetMinY(view.frame) + 80];
        [spring setCompletionBlock:^(POPAnimation * ani, BOOL fin) {
        }];
    
        POPBasicAnimation* basic = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerRotation];
        basic.beginTime = CACurrentMediaTime();
        basic.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        basic.toValue = [NSNumber numberWithFloat:-M_PI_4];
        basic.duration = .4f;
    
        POPBasicAnimation* rotation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerRotation];
        rotation.beginTime = CACurrentMediaTime() + .4f;
        rotation.toValue = [NSNumber numberWithFloat:0.f];
        rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
        rotation.duration = .25f;
    
        POPBasicAnimation* donw = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPositionY];
        donw.beginTime = CACurrentMediaTime() + 0.4f;
        donw.toValue = [NSNumber numberWithFloat:CGRectGetMinY(view.frame)];
        donw.duration = .25f;
        donw.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    
        [view.layer pop_addAnimation:spring forKey:@"spring"];
        [view.layer pop_addAnimation:basic forKey:@"basic"];
        [view.layer pop_addAnimation:donw forKey:@"down"];
        [view.layer pop_addAnimation:rotation forKey:@"rotation"];
    }

     

    #参考

    Pop Github : https://github.com/facebook/pop

    Popping -Pop案例 : https://github.com/schneiderandre/popping

    POP使用教程: https://github.com/maxmyers/FacebookPop

     

     中文教程

    POP使用指南(来自Cocohina)

    使用FaceceBook的Pop框架替换UIScrollView的减速动画(来自Cocohina)

    Facebook POP 进阶指南(来自Cocohina)

    demo参考链接:https://github.com/jxd001/POPdemo/blob/master/README.md

                           http://codeplease.io/

                           http://tapity.com/tutorial-getting-started-with-pop/

     

    转载于:https://www.cnblogs.com/moyazi/p/4724357.html

    展开全文
  • ios 动效

    2015-10-11 20:22:09
    动效应该根据情况合理使用,过于花哨或不适当的动效反而会给用户体验带来负面影响,那么应当如何合理使用动效呢?本专题主要针对应用中动效的使用,解释了为什么要使用动效,列举了应当遵循的动效

    导语:

    在Clear,Path以及Twitter等众多知名应用的亲身示范下,动效设计似乎已成为成功产品的标配。App中随处可见各种各样的动效,从引导页到下拉刷新,从转场过渡到登录界面,从加载指示到状态反馈提示等。但动效应该根据情况合理使用,过于花哨或不适当的动效反而会给用户体验带来负面影响,那么应当如何合理使用动效呢?本专题主要针对应用中动效的使用,解释了为什么要使用动效,列举了应当遵循的动效原理,并从程序员和设计师的角度进行了动效实现,最后提供的是一系列动效学习资源,希望本专题能帮您打造一款更具魅力的应用程序。
    为什么使用动效设计
    头条推荐:转场动效的迷人之处
    当提到动画和可爱的交互的时候,人们总是滥用“趣味性”这个词。对这些人来说很炫酷,但是你猜怎么着?动效也可以有功能性作用,而不仅仅是个装饰性的细节......
    程序员眼中的动效设计
    头条推荐:让你的应用“动”起来
    在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看到iOS中如何使用图层精简非交互式绘图......
    更多专题+more
    开启Apple Watch应用开发之旅
    开启Apple Watch应用开发之旅
    iOS开发进阶,从Xcode开始
    iOS开发进阶,从Xcode开始
    零基础学习Cocos2d-x
    零基础学习Cocos2d-x
    Swift 2.0中文版
    新编程语言Swift专题

    展开全文
  • iOS滚珠菜单动效

    千次阅读 2016-07-04 07:55:21
    iOS滚珠菜单动效,核心代码使用了UIDynamic物理引擎

    代码实现效果 gitHub地址:https://github.com/BearRan/FlowMenuAnimation

    这里写图片描述

    原图效果
    http://www.tuyiyi.com/v/46575.html
    原图效果


    前言:

    注意!由于collisionBoundsType是iOS9.0之后才有的,所以运行本demo时一定要是9.0之后的系统,不然会出现异常。而且屏幕适配暂时没调,所以iPhone6S运行最佳。

    本来一味着想用CAAnimation来实现,却发现CABasicAnimation和CAKeyFrameAnimation完全不够用。有一位网友提醒我用有物理效果的UIDynamic这个试试,但是之前没有接触过这一块,也就只能现学现卖了。
    
    本章只说明滚珠的难点和动效实现,其他部分的动效就简单的带过了。关于UIDynamic如何使用本文也不做讲解,文章结尾会放置一些比较好的链接。
    

    难点:

    1. 滚珠路径如何绘制
    2. 滚珠动画该分解成几个步骤
    3. 如何分解滚珠的物理效果

    ###难点解析:
    ####1.滚珠路径如何绘制

    使用BezierPath是毋庸置疑的,但是如何勾勒出来呢?用代码一点一点地调太费时间了。建议使用Sketch和CodePaint共同完成。
    dmg资源:http://blog.csdn.net/xiongbaoxr/article/details/50989283
    如何使用可以参考这篇博客:http://blog.csdn.net/xiongbaoxr/article/details/50890565
    Sketch:可以方便地勾勒出路径,并且生成SVG文件。
    CodePaint:可以将SVG的路径文件转换成代码

    大致步骤如下:

    1. 把效果图截取一张,拖到Sketch做背景

    2. 新建图层,使用钢笔工具临摹背景图勾勒出路径

    3. 注意:勾勒时可以选择非镜像的控制点,这样方便调整曲线

    这里写图片描述

    接着点击Sketch右下角的倒出按钮,格式选为SVG格式

    这里写图片描述

    将生成的SVG文件拖入到codePaint中,拖入成功后会直接看到如下界面

    这里写图片描述

    看到代码路径后可以整段copy出来,当然,我建议把所有的点抽离出来,方便做适配

    代码绘制凹槽动画

    demo的AppDelegate.h中有以下这些开关,可以自己调配,方便观察

    这里写图片描述

    单个滚珠动效演示,这样看应该比较容易理解。其实我是盖了一个新的图层专门用来做滚珠动效的。
    这里写图片描述

    控制点就是用普通的UIAniamtion实现的,在动画之行的过程中,通过CADisplayLink实时观察Point的PresentLayer的position来不停的重绘贝塞尔曲线。

    ####2.滚珠动画该分解成几个步骤

    主要分为以下步骤
    阶段一:滚珠一起滚落下来时到最高点的阶段;
    阶段二:滚珠滚落到最高点后回流的的阶段;
    阶段三:滚珠消失阶段;

    ####3.如何分解滚珠的物理效果

    UIDynamic有以下物理效果

    • UIGravityBehavior:重力行为
    • UICollisionBehavior:碰撞行为
    • UISnapBehavior:捕捉行为
    • UIPushBehavior:推动行为
    • UIAttachmentBehavior:附着行为
    • UIDynamicItemBehavior:动力元素行为

    ###UIGravityBehavior:重力行为
    不再解释

    #pragma mark  重力行为
    - (UIGravityBehavior *)addGravityBehavior:(id <UIDynamicItem>)item
    {
        UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] init];
        [gravityBehavior addItem:item];
        [_animator addBehavior:gravityBehavior];
        
        return gravityBehavior;
    }
    

    ###UICollisionBehavior:碰撞行为
    适用于:UIView和父类view的边界碰撞,以及和其他UIView碰撞
    这里可以配合重力行为来设定小球的运动路径

    #pragma mark  碰撞行为
    - (UICollisionBehavior *)addCollisionBehavior:(id <UIDynamicItem>)item
    {
        UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] init];
        [collisionBehavior addItem:item];
        [collisionBehavior addBoundaryWithIdentifier:@"path" forPath:_beizerPath];
        [_animator addBehavior:collisionBehavior];
        
        return collisionBehavior;
    }
    

    ###UISnapBehavior:捕捉行为
    顾名思义,不解释

    UIPushBehavior:推动行为
    使用瞬间或持续的力并按照某一方向作用于某个UIView
    用于开始或结束时的小球推动

    #pragma mark  显现动画,第一个球向右的推力
    - (UIPushBehavior *)addPushBehavior_inFirstBtn
    {
        UIButton *tempBtn = _btnArray[0];
        UIPushBehavior *pushBehavior = [[UIPushBehavior alloc] initWithItems:@[tempBtn] mode:UIPushBehaviorModeInstantaneous];
        pushBehavior.pushDirection = CGVectorMake(1, 0.3);
        pushBehavior.magnitude = 1.6;
        [_animator addBehavior:pushBehavior];
        
        return pushBehavior;
    }
    

    ###UIAttachmentBehavior:附着行为
    UIView和某个UIView的相互吸附行为
    此处用于小球见的相互吸附作用

    #pragma mark  添加球与球之间的附着行为
    - (UIAttachmentBehavior *)addAttachmentBehavior_item:(id <UIDynamicItem>)item attachToItem:(id <UIDynamicItem>)attachToItem
    {
        SpecialBtn *tempBtn = (SpecialBtn *)item;
        
        UIAttachmentBehavior *attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:item attachedToItem:attachToItem];
        [attachmentBehavior setLength:tempBtn.width + 20];
        [attachmentBehavior setDamping:10.01];
        [attachmentBehavior setFrequency:1];
        [_animator addBehavior:attachmentBehavior];
        
        return attachmentBehavior;
    }
    

    ###UIDynamicItemBehavior:动力元素行为
    一些其他的物理元素,比如摩擦力,线速度阻力,角速度阻力等

    #pragma mark  动力元素行为
    - (UIDynamicItemBehavior *)addDynamicItemBehavior:(id <UIDynamicItem>)item
    {
        UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[item]];
        itemBehavior.resistance = 0;
        itemBehavior.allowsRotation = YES;
        itemBehavior.angularResistance = 4.0;
        itemBehavior.friction = 0.8;
        [_animator addBehavior:itemBehavior];
        
        return itemBehavior;
    }
    

    ###阶段一:滚珠一起滚落下来时到最高点的阶段
    ####球与球之间的附着行为 + 重力行为+碰撞行为+ 动力元素行为+ 第一个球向右的推力

    #pragma mark 显现动画
    - (void)showBtnsAnimation
    {
        _animatorStatus = kAnimatorStatus_open;
        [_animator removeAllBehaviors];
        
        if (showPath) {
            _pathLayer.path = _beizerPath.CGPath;
            _pathLayer.fillColor = [UIColor clearColor].CGColor;
            _pathLayer.strokeColor = [UIColor orangeColor].CGColor;
            _pathLayer.lineWidth = 2.0;
            [self.layer addSublayer:_pathLayer];
        }
        
        CGFloat btn_gap = [self setXX:16];
        for (int i = 0; i < [_btnArray count]; i++) {
            
            SpecialBtn *tempBtn = _btnArray[i];
            tempBtn.tag = i;
            [self addSubview:tempBtn];
            
            //  设定初始位置
            [tempBtn setX:(tempBtn.width + btn_gap) * ([_btnArray count] - 1 - i) + btn_gap];
            [tempBtn setY:-tempBtn.height];
            
            //  添加球与球之间的附着行为
            if (i > 0) {
                [self addAttachmentBehavior_item:_btnArray[i] attachToItem:_btnArray[i - 1]];
            }
            
            //  重力行为
            UIGravityBehavior *gravityBehavior = [self addGravityBehavior:tempBtn];
            if (i == [_btnArray count] - 1) {
                //  最后一个球处理重力行为
                [self dealLastBtnGravityBehavior:gravityBehavior tempBtn:tempBtn];
            }
    
            //  碰撞行为
            [self addCollisionBehavior:tempBtn];
            
            //  动力元素行为
            UIDynamicItemBehavior *itemBehavior = [self addDynamicItemBehavior:tempBtn];
            if (i == [_btnArray count] - 1) {
                //  最后一个球增加密度,以防止出现的时候,由于惯性的原因导致飞起来
                itemBehavior.density = 1.8;
            }
            
        }
        
        //  第一个球向右的推力
        [self addPushBehavior_inFirstBtn];
    }
    

    ###阶段二:滚珠滚落到最高点后回流的的阶段
    ####球与球之间的附着行为 + 重力行为+碰撞行为+ 动力元素行为+ 最后一个球向左push

    for (int i = 0; i < [_btnArray count]; i++) {
                        
                        //  添加球与球之间的附着行为
                        if (i > 0) {
                            
                            UIAttachmentBehavior *attachmentBehavior = [self addAttachmentBehavior_item:_btnArray[i] attachToItem:_btnArray[i - 1]];
                            [attachmentBehavior setFrequency:5];
                            [attachmentBehavior setLength:tempBtn.width + 5];
                        }
                        
                        //  重力行为
                        [self addGravityBehavior:_btnArray[i]];
                        
                        //  碰撞行为
                        [self addCollisionBehavior:_btnArray[i]];
                        
                        //  动力元素行为
                        UIDynamicItemBehavior *itemBehavior = [self addDynamicItemBehavior:_btnArray[i]];
                        itemBehavior.angularResistance = 15.0;
                    }
                    
                    //  最后一个球向左push
                    UIPushBehavior *pushBehavior = [[UIPushBehavior alloc] initWithItems:@[tempBtn] mode:UIPushBehaviorModeContinuous];
                    pushBehavior.pushDirection = CGVectorMake(-1, -0.5);
                    pushBehavior.magnitude = 2.3;
                    [_animator addBehavior:pushBehavior];
    

    ###阶段三:滚珠消失阶段
    ####球与球之间的附着行为 + 重力行为+碰撞行为+ 动力元素行为+ 最后一个球向左push(和阶段二几本一致,只是推动的力大了一些)

    #pragma mark 消退动画
    - (void)closeBtnsAniamtion
    {
        NSLog(@"-- closeBtnsAniamtion");
        
        _animatorStatus = kAnimatorStatus_close;
        SpecialBtn *lastBtn = (SpecialBtn *)[_btnArray lastObject];
        
        [_animator removeAllBehaviors];
        
        for (int i = 0; i < [_btnArray count]; i++) {
            
            //  添加球与球之间的附着行为
            if (i > 0) {
                
                UIAttachmentBehavior *attachmentBehavior = [self addAttachmentBehavior_item:_btnArray[i] attachToItem:_btnArray[i - 1]];
                [attachmentBehavior setFrequency:5];
                [attachmentBehavior setLength:lastBtn.width + 5];
            }
            
            //  重力行为
            UIGravityBehavior *gravityBehavior = [self addGravityBehavior:_btnArray[i]];
            if (i == 0) {
                [self dealFirstDisappearBtnGravityBehavior:gravityBehavior tempBtn:_btnArray[i]];
            }
            
            //  碰撞行为
            [self addCollisionBehavior:_btnArray[i]];
            
            //  动力元素行为
            [self addDynamicItemBehavior:_btnArray[i]];
        }
        
        //  最后一个球向左push
        UIPushBehavior *pushBehavior = [[UIPushBehavior alloc] initWithItems:@[lastBtn] mode:UIPushBehaviorModeContinuous];
        pushBehavior.pushDirection = CGVectorMake(-1, -0.5);
        pushBehavior.magnitude = 10.0;
        [_animator addBehavior:pushBehavior];
    }
    

    结束语:

    以上即是滚珠动画的核心步骤和讲解。

    ###UIDynamic资料相关网址:

    Core Animation详解(三)-UIDynamic Animation
    http://www.th7.cn/Program/IOS/201502/389463.shtml
    WWDC 2013 Session笔记 - UIKit Dynamics入门
    https://onevcat.com/2013/06/uikit-dynamics-started/
    iOS动画——DynamicAnimate 力学动画
    http://www.cnblogs.com/madpanda/p/4742563.html

    展开全文
  • 在上篇《游戏动效与美术特效的区别》文章中,学院君给大家介绍了VX是什么。今天又给大家带来一篇VX动效入门干货文章,主要从哪里学,怎么做,如何深入等三个方面,系统讲下VX动效学习如何入门。 一、学习渠道 (一...

    在上篇《游戏动效与美术特效的区别》文章中,学院君给大家介绍了VX是什么。今天又给大家带来一篇VX动效入门干货文章,主要从哪里学,怎么做,如何深入等三个方面,系统讲下VX动效学习如何入门。

    一、学习渠道

    (一)灵感来源

    1.游戏 : 参考风格、交互表现、效果、情景等;

    2.影视 :参考细节刻画、氛围营造,镜头运用等;

    3.生活规律 :自然运动规律,自然现象,自然反馈等;

    比如游戏的情景学习:

    《哈利波特·魔法觉醒》IP与玩法系统结合

    比如影视的氛围学习:看下图,电闪雷鸣时候,周围是怎样的氛围效果,生物是怎样的情绪和反馈,在做界面动效氛围营造时候就可以借鉴其氛围感受。

    电影《神奇动物在哪里》
    电影《神奇动物在哪里》

    电影的细节刻画学习:

    (电影《奇异博士》)

    自然现象运动规律学习:作用物与被作用物各自的反馈是如何表现的。

    (二)教程来源

    以下列举几个十分常用的教程网站或参考网站:

    1.油管,比如 :

    https://www.youtube.com/watch?v=ir9Rvi1QG8Y&t=237s

    2.behance,比如 :

    https://www.behance.net/mathewdesanctis

    3.vimeo,比如 : 

    https://vimeo.com/312858152

    4.B站,比如 :

    https://search.bilibili.com/all?keyword=AE%20%E6%95%99%E7%A8%8B&from_source=nav_suggest_new

    5.Pinterest,比如 :   

    https://www.pinterest.com/liulina2019/fx/%E5%8D%A1%E7%89%8C/

    6.花瓣网,比如 :

    https://huaban.com/pins/3126584486/

    二、VX常用工具

    1.设计及制作工具:AE\PS\Flash\Spine\live2d\3DMAX\C4D...

    2.引擎及实现工具:Unity\UE4\Cocos\FairyGUI\Messiah\Splend...

    对于初学者的个人建议:设计软件先学习AE,引擎先学习Unity,因为这两个是最最常用的,学习AE能够同时训练动画节奏和特效基础,而且效果可见性及时,Unity是目前市场最广泛应用的引擎,而且这两款软件的网上教程资源是非常丰富的,很容易上手。对于其他软件,其实使用原理都是相通的,只要掌握了原理和规律,愿意花时间去学习了解都是能够掌握的,前期不用急切把所有软件都学会,循序渐进即可。

    三、项目中动效制作流程

    动效制作的主要流程是:需求分析-设计预演-实现落地,而在项目真实的操作不止如此,他会中间穿杂着一些反复的过程,比如,拿到需求后,如果没有灵感,会先搜集对应参考,再制定合适的设计思路,再进行设计预演,设计预演的过程中会反复地跟GUI或UI或策划进行沟通,在设计和功能上达到统一意见后,再进行落地到项目引擎里面,落地之后,需要主动进游戏去跑查效果是否正确,如果游戏效果跟设计对不上,要去排查问题,找解决办法,这个过程中也会跟程序大哥沟通频繁。

    四、项目动效案例展示

    1.效果展示

    (游戏《三国如龙传》)

    2.GUI设计资源文件整理与拆分

    GUI同学的PSD设计源文件:

    拿到PSD文件后,进行整理和拆分:

    备注:好的PSD文件是分层清晰,名字对应的,切图干净的;与GUI同学合作时,可以告知需要的图层效果和切图需求,请GUI同学拆好合并后再给到VX同学,这样的方式是最好的,以防VX同学自己合并整理图层时,影响改变某些内置的效果(比如:父组是穿透模式)

    整理后的图层如下:

    3.AE素材导入

    4.AE设计阶段

    在思考好设计方案之后,对动效需求进行拆分设计,设计的过程中同时思考以下几个方面:

    ①如何准确地表达其功能

    ②外观与整体美术风格是否协调

    ③是否是合理的表现与节奏感

    ④对后期输出的资源量大小心里有数,是否在合理范围内

    ⑤能否充分发挥其交互特效

    5.落地实现阶段

    使用项目对应的UI编辑器进行落地资源分拆制作,这个例子在项目中的实现如下:

    输出方式:

    PNG图片序列帧

    Cocos编辑器动画

    Plist粒子特效

    程序直接代码实现

    以上便完成了一个动效需求的制作和实现,VX基本的工作流程差不多是这样。当然处于不同的项目,工作流程也会有些许不同,比如,UE4引擎的项目,可以省略AE设计预演阶段,而直接在UE4虚幻引擎中直接制作,展示,反馈,实现,工具的选择还是需要看设计师个人习惯而定,不需太拘谨在某个工具的使用。

    五、深入学习需要做到哪些方面

    1.动画原理学习

    平时多做一些运动规律的练习,更扎实地去了解动画原理,推荐动画的十二法则,大部分动画的运动规律都在这十二法则的规律上进行延申,这里需要强调下:动效中运用的动画不限于此法则,因为需要根据设计而定,根据项目风格而定,不要死板地运动到每个设计中,需要取巧地运用,同时还要考虑玩家的交互习惯。

    https://medium.com/ux-in-motion/creating-usability-with-motion-the-ux-in-motion-manifesto-a87a4584ddc

    2.特效原理学习

    特效的练习,可以在这几个方面下功夫:色彩、机构、节奏;平时多浏览美术大佬们的特效网站。

    ( -来自VFX for Knightmare Lands, Dimka Sokolov  Real-Time VFX for Knightmare-)

    3.创意思维培养

    目的是锻炼自己的导演思维,开拓视野,以编导的思维去做动效设计,除了平时的小控件动效外,特别有利于做转场动效的设计以及高级风格的预演设计,有利于作品品质和设计高度的提升。

    4.交互体验思考

    平常玩游戏时候多留意各种交互的反馈形式,APP的交互方式也可以进行学习,归纳总结其原理可以运用到游戏里。动效设计不同于美术特效设计,在设计的时候需要同时兼顾用户体验,考虑用户感受与操作反馈,因此,平时自己在使用一些应用软件的时候可以多留意多学习多总结。比如下面APP展示界面的切换效果非常舒服。可以分析其运动规律、节奏等,进行思考、拆解、运用。

    5. 进一步认识设计和UI交互

    推荐分享给大家我个人觉得对我很有帮助的两本书:

    《写给大家看的设计书》

    《认知与设计_理解UI设计准则》

    以上是我很想分享给大家一起学习的内容,欢迎大家入坑VX动效行业,期待你们的加入,我在这里等你们❤..

    更多秋招干货,上网易游戏学院app查看!

    APP:https://game.academy.163.com/ssi/app/?referrer=csdn

    网易游戏内推及内部职业干货交流群,入群即可享受超多福利!!

    入群方式:链接进入【网易互娱|校招知识储备&新游体验馆探营无限福利群】:

    展开全文
  • 然后就找度娘学习下了相关经验,受到这篇博客的启发:ios核心动画高级技巧,使用CADisplayLink定时器来做此动效引擎(其实使用NSTimer和GCD定时器也可以做到,但使用CADisplayLink最佳)。 现在我已经将此效果从...
  • 滚珠菜单动效-b

    2016-09-03 23:22:00
    原型从网上找的,动效使用了CAAnimation和UIDynamic物理引擎。 gitHub :https://github.com/BearRan/FlowMenuAnimation 大致步骤如下: 把效果图截取一张,拖到Sketch做背景 新建图层,使用钢笔...
  • 数字金额加减动效

    千次阅读 2016-10-23 21:05:08
    数字金额加减动效 阅读 265收藏 292016-10-21 原文链接:http://www.jianshu.com/p/53b9bac43201 一款使用简单的数字加减动画控件, 支持 UILabel、UIButton 显示 —— 由 jkpang 分享 ...
  • 手淘互动动效的探索

    2017-08-26 09:32:17
    手淘互动动效的探索 内容来源:2017年6月18日,手淘前端技术专家大漠在“2017 iWeb峰会·第六届HTML5峰会 ”进行《手淘互动动效的探索》演讲分享。IT大咖说作为独家视频合作方,经主办方和讲者...
  •  动效在产品设计的作用 动效设计的好标准2. 如何设计动效? 6个构思动效的方法 6个实现动效的方法3. 动效的类别4. 常用的动效软件5. 让动效落地的4个方法一、为什么需要设计动效?我最开始接
  • Orgami 2.0 发布已经有一段时间了,其中最让我关注的,就是它 Code Export 的功能:按照官方的说法,Origami 可以将动效分别导出适用于 iOS、Android、Web 三端特定引擎的代码,提供给开发同学使用,以解决设计到...
  • 可能是最全的前端动效库汇总

    千次阅读 2019-04-24 16:10:43
    一个跨浏览器的动效基础库,是许多基础动效的解决方案。从经典的弹跳动效到独特的扭曲动效,一应俱全。 文件大小:55.2 kB. Bounce.js 5754 ★ 可以直接在浏览器中进行设计和设置的动画库,带有一个完整的网页...
  • 作者:laer_L前言应鸿洋大神建议完善一下细节,之前确实写得比较简洁,...需求APP 需要做一个类似蚂蚁森林的功能模块,动效和蚂蚁森林接近,水滴最多 6 滴,根据经验来说这种交互肯定用 RN、H5 亦或游戏引擎来做最佳,
  • 踏得网专注于互联网动画、特效、交互动效和3D视觉领域的在线搜索,实时收录国内外产品创意、技术作品代码演示、数据模型和在线教程, 并以众包的方式对内容索引进行再加工、编译。 踏得网同时还是一个简单易用的、...
  • 提示: angular2时animation代码在核心模块里面(@... 这样可以在不用动效时可以不引入进来. animation模块特性方法: 1、trigger 触发器 `trigger`是一个动画特定的函数,触发器,`trigger`将根据提供的`na...
  • 安利一波CSS、JS炫酷动效在线下载网站 # bttn.css 专注分享网页按钮的样式库 # Hover-Buttons 一个可以生成代码的网站 # granim.js 基于canvas的背景颜色渐变动画插件。该插件通过配置几组不同的颜色方案,使指定...
  • 动画从维度上分,3D动画一般采用诸如Three.js的渲染引擎或者游戏引擎来实现。2D动画在某些场景也会采用引擎。 常见游戏引擎 Cocos Egret LayaAir Phaser 常见渲染引擎 Pixi.js (2D动画渲染引擎) ...
  • 然后就找度娘学习下了相关经验,受到这篇博客的启发:ios核心动画高级技巧,使用CADisplayLink定时器来做此动效引擎(其实使用NSTimer和GCD定时器也可以做到,但使用CADisplayLink最佳)。 现在我已经将此效果从项目中分...
  • 物理API访问PRO Hype 的物理引擎基于 something.js,现在可以通过 JavaScript 代码和元素设置器 API 进行访问。这允许进一步定制并利用其高级功能。 总览 Hype 4是用于macOS的HTML5创建应用程序。用Hype制作的交互...
  • iOS设备上的动画借助官方SDK:CoreAnimation那一套...早几年出了个动效引擎库Lottie,比较强大,好几个平台都能使用:web(h5)、iOS、Android上都有,接入简单,使用方便。吃入同一个json文件,展示相同的动画效果。满
  • Shader "TAClass/CommonEffects" { Properties { [Header(Render)] [Enum(UnityEngine.Rendering.BlendMode)]_SrcBlend("Src Blend",int) = 0 [Enum(UnityEngine.Rendering.BlendMode)]_DstBlend("Dst Blend",...
  • 这些丰富的图形与动画技术框架是iOS平台上实现各种华丽动效的基石,第三方也有诸如facebook的Pop动画引擎,甚至有些App会使用OpenGL、SpriteKit、Metal等游戏引擎来创作复杂的动画效果,Apple也在WWDC 2015中展示了...
  • Qt Quick使用OpenGL作为渲染引擎,配合上述技术,让你的原型炫酷起来,甚至比最终App都要炫酷。 4. Model-View机制 在Qt Quick中你可以使用各种Model来实现强大的列表视图,视图中的Item即是...
  • Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。 下载地址: http://threejs.org/ 首先创建一个HTML文件,引入three.js引擎包. <!DOCTYPE HTML> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,871
精华内容 748
关键字:

动效引擎