一个有趣的加载动画
2018-03-16 本文已影响0人
Walk_In_Jar

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

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);
}
}
加点颜色渐变吧

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);
}
另一种移动至目标位置


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);
}