PingPong效果在 Unity 真的是随处可见:来回运动啦,呼吸灯啦,活塞运动啦,渐隐渐显啦,今天笔者就用两种方式教大家写下这个简单而常见的动画效果。
1. DoTween
借助Dotween,我们的PingPong真的可以简单到爆炸:
//在Dotween 这种动效叫yoyo(悠悠球模式)
transform.DOScale(2, 2).SetLoops(-1, LoopType.Yoyo);
效果如下:
并不是说 Dotween 的Pingpong只能做这个 Scale 的呼吸效果,其实还可以做好多好多就不一一列举啦
2. 写算法(假装是一个算法)
有时候,不想引入插件,那就这么写,极简且优雅。
public float factor = 1; //时间缩放因子,决定了 PingPong的周期
public event Action PingPong; //事件,订阅以驱动游戏对象 PingPong
float progress = 0;
bool addition = true;
void Update()
{
progress += (addition ? 1 : -1) * Time.deltaTime * factor;
progress = Mathf.Clamp01(progress);
//嵌套三目运算做状态反转
addition = progress == 1 ? false : progress == 0 ? true : addition;
//驱动订阅者
PingPong?.Invoke(progress);
}
怎么使用呢,像这样:
private void Start() //测试嘛,在同一个类里写下
{
factor = 0.5f; //等效2s
PingPong = v =>
{
transform.localScale = Vector3.one + Vector3.one * v;
};
}
效果跟上面的动图是一模一样的,就不再次贴了。
有人说,人家 Dotween 还有 Ease 缓动效果可以选择,其实咱们写的也可以引入 Ease 哟!
那怎么实现给PingPong加Ease呢?感兴趣的可以看看扩展阅读...
扩展阅读: