【Unity3D】代码移动动画优化

设置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();
                }
            }
        }
        
    }

}

猜你喜欢

转载自blog.csdn.net/qq_33205561/article/details/126462640