一个有趣的加载动画

2018-03-16  本文已影响0人  Walk_In_Jar
1.gif

需要借助到一个Vectrosity 划线插件,挺强大的,dotween也非常适合做动画。
创作过程是,先创建线,再想办法让线跟着点动,再完成其他的动画。
动画样式摘自zcool,源码原创!


QQ图片20180316165442.png
using UnityEngine;
using Vectrosity;
using System.Collections.Generic;
using DG.Tweening;
public class LoadingLineManager : MonoBehaviour
{
    public Transform[] Points;
    public Transform[] nums;
    public LineType lineType = LineType.Continuous;
    public Joins joins = Joins.Fill;
    public float lineWidth = 2;
    public float t;
    private VectorLine[] vectorLines;
    // Use this for initialization
    private void Start()
    {
        vectorLines = new VectorLine[Points.Length];
        for (int i = 0; i < vectorLines.Length; i++)
        {
            vectorLines[i] = new VectorLine("Line", new List<Vector2>(), lineWidth, lineType, joins);
            vectorLines[i].points2.Add(Vector2.zero);
            vectorLines[i].points2.Add(Vector2.zero);
        }
        InvokeRepeating("ChangeSi", 0, t);
    }
    // Update is called once per frame
    void Update()
    {
        for (int i = 0; i < vectorLines.Length; i++)//更新位置 绘制
        {
            int j = 0;
            if (i < Points.Length - 1)
            {
                j = i + 1;
            }
            else
            {
                j = 0;
            }
            vectorLines[i].points2[0] = Points[i].position;
            vectorLines[i].points2[1] = Points[j].position;
            vectorLines[i].Draw();
        }
    }
    /// <summary>
    ///  取 1 3 5 7 位置的point的z 减去90
    /// </summary>
    void ChangeSi()
    {
        for (int i = 1; i < nums.Length; i += 2)
        {
            nums[i].DOLocalRotate(new Vector3(0, 0, nums[i].localEulerAngles.z - 90), t - 0.3f, RotateMode.FastBeyond360);
        }
        transform.DOLocalRotate(new Vector3(0, 0, transform .localEulerAngles.z - 45), t - 0.3f, RotateMode.FastBeyond360);
    }
}

加点颜色渐变吧


2.gif
    void ChangeSi()
    {
        for (int i = 1; i < nums.Length; i += 2)
        {
            nums[i].DOLocalRotate(new Vector3(0, 0, nums[i].localEulerAngles.z - 90), t - 0.3f, RotateMode.FastBeyond360);  //位置跳跃
        }
        for (int i = 0; i < Points.Length; i++)
        {
            Color c = colors[Random.Range(0, colors.Length)];
            Points[i].GetComponent<Graphic>().DOColor(c, t - 0.3f);//渐变颜色动画
            vectorLines[i].color = c;
        }
        transform.DOLocalRotate(new Vector3(0, 0, transform.localEulerAngles.z - 45), t - 0.3f, RotateMode.FastBeyond360);
    }

另一种移动至目标位置


3.gif
QQ图片20180316174650.png
    void ChangeSi()
    {
        for (int i = 1; i < Points.Length; i += 2)
        {
           // 移动至目标位置的方法
            if (i > 1)
                Points[i].DOLocalMove(Points[i - 2].localPosition, t - 0.1f, true);
            else
                Points[i].DOLocalMove(Points[Points.Length - 1].localPosition, t - 0.1f, true);
        }
        for (int i = 0; i < Points.Length; i++)
        {
            Color c = colors[Random.Range(0, colors.Length)];
            Points[i].GetComponent<Graphic>().DOColor(c, t - 0.1f);//渐变颜色动画
            vectorLines[i].color = c;
        }
        transform.DOLocalRotate(new Vector3(0, 0, transform.localEulerAngles.z - 45), t - 0.3f, RotateMode.FastBeyond360);
    }
上一篇 下一篇

猜你喜欢

热点阅读