美文网首页unity
[Unity 3d] 如何优雅的写一个PingPong效果

[Unity 3d] 如何优雅的写一个PingPong效果

作者: 雨落随风 | 来源:发表于2019-05-10 02:01 被阅读5次

    PingPong效果在 Unity 真的是随处可见:来回运动啦,呼吸灯啦,活塞运动啦,渐隐渐显啦,今天笔者就用两种方式教大家写下这个简单而常见的动画效果。

    1. DoTween

    借助Dotween,我们的PingPong真的可以简单到爆炸:

    //在Dotween 这种动效叫yoyo(悠悠球模式)
     transform.DOScale(2, 2).SetLoops(-1, LoopType.Yoyo); 
    
    效果如下:

    并不是说 Dotween 的Pingpong只能做这个 Scale 的呼吸效果,其实还可以做好多好多就不一一列举啦

    2. 写算法(假装是一个算法)

    有时候,不想引入插件,那就这么写,极简且优雅。

       public float factor = 1; //时间缩放因子,决定了 PingPong的周期
        public event Action<float> PingPong; //事件,订阅以驱动游戏对象 PingPong
        float progress = 0;
        bool addition = true;
        void Update()
        {
            progress += (addition ? 1 : -1) * Time.deltaTime * factor;
            progress = Mathf.Clamp01(progress);
            //嵌套三目运算做状态反转
            addition = progress == 1 ? false : progress == 0 ? true : addition;
            //驱动订阅者       
            PingPong?.Invoke(progress);
        }
    

    怎么使用呢,像这样:

        private void Start() //测试嘛,在同一个类里写下
        {
            factor = 0.5f; //等效2s 
            PingPong = v =>
            {
                transform.localScale = Vector3.one + Vector3.one * v; 
            };
        }
    

    效果跟上面的动图是一模一样的,就不再次贴了。

    有人说,人家 Dotween 还有 Ease 缓动效果可以选择,其实咱们写的也可以引入 Ease 哟!
    那怎么实现给PingPong加Ease呢?感兴趣的可以看看扩展阅读...

    扩展阅读:

    1. EasingCore-GitHub
    2. EasingEquationsDouble-GitHub
    3. [Unity 3d] 如何在自己写的动效中加入Ease
    4. [Unity 3d] Debug.Log 跳坑笔记

    相关文章

      网友评论

        本文标题:[Unity 3d] 如何优雅的写一个PingPong效果

        本文链接:https://www.haomeiwen.com/subject/xsbnoqtx.html