设置X轴和Y轴的动画曲线,通过AnimationCurve.Evaluate获取进度中X和Y移动的进度的值,控制偏移。可以根据动画曲线控制平移时候的效果
using LuaInterface;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CurveHelper : MonoBehaviour
{
[Header("X轴方向动画曲线")]
public AnimationCurve animationCurveX;
[Header("Y轴方向动画曲线")]
public AnimationCurve animationCurveY;
[Header("结束位置")]
public Vector3 endV3;
[Header("原始位置")]
public Vector3 originalV3;
/// <summary>
/// 当前动画时间
/// </summary>
private float doTime = 0;
[Header("动画总时间")]
public float totalTime = 1;
/// <summary>
/// 终点和起点的x方向偏移
/// </summary>
private float offSetX = 0;
/// <summary>
/// 终点和起点的y方向偏移
/// </summary>
private float offSetY = 0;
/// <summary>
/// 是否开始播放动画
/// </summary>
private bool isBegin = false;
public LuaFunction endCalBack;
public void BeginAnimation(Vector3 oV, Vector3 eV, LuaFunction endCalB)
{
doTime = 0;
isBegin = true;
endV3 = eV;
originalV3 = oV;
transform.position = originalV3;
offSetX = endV3.x - originalV3.x;
offSetY = endV3.y - originalV3.y;
endCalBack = endCalB;
}
// Update is called once per frame
void Update()
{
if (isBegin)
{
transform.position = new Vector3(animationCurveX.Evaluate(doTime/totalTime) * offSetX + originalV3.x, animationCurveY.Evaluate(doTime/ totalTime) * offSetY + originalV3.y, endV3.z);
doTime += Time.deltaTime;
if (doTime >= totalTime) //动画时间结束
{
isBegin = false;
if (endCalBack != null)
{
endCalBack.Call();
}
}
}
}
}