我们一般要引入 DoTween 的时候会特别的麻烦因为要导入 pack 包 我们是不是可以用一些技巧代替呢?
------来了来了
--Timeline手搓DoTween
先创建这个Timeline 窗口
创建一个空物体拖入到 Timeline
选择模式一般都是
参数
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Timeline;
public class DT : MonoBehaviour,ITimeControl
{
Action<float> action;
float start, end, time;
Action endaction;
//开始
public void OnControlTimeStart()
{
}
public void OnControlTimeStop()//结束
{
Destroy(gameObject);
}
//update
public void SetTime(double _time) //设置的时间
{
//如果当前已经开始计算
if (_time < time) //time 所用时间
{
float p = (float)_time / time; //求区间比值
float now = Mathf.Lerp(start, end, p); //在 a 与 b 之间按 t 进行线性插值。
//用时间
action(now);
}
else
{
if (endaction!=null)
{
endaction(); //执行结束的事件
}
//销毁
Destroy(gameObject);
}
}
//结束事件
public DT OnComplete(Action action)
{
endaction = action;
return this;
}
// DOTween.To(()=>变量,x=> 变量=x , 变量目标值, 过渡时间);
// 事件 第一个变量start 目标end time
public static DT To(Action<float> action, float start, float end, float time)
{
DT dT = Instantiate(Resources.Load<DT>("DT"));
dT.action = action;
dT.start = start;
dT.end = end;
dT.time = time;
return dT;
}
}
有一个小问题 我们设置timeline 的事件动画区间不要太短
如果持续事件只有1秒的 但是这个timeline 播放完毕需要 2秒就会导致当前的结尾函数不执行
//解决方案
持续事件稍微变长就行因为我们写的函数中可以直接销毁当我们运行结束后