收取资源效果分为3个部分:
- 金币等资源icon飞入资源栏(对资源icon做对象池)。github地址ResEffectProject:https://github.com/GeWenL/ResEffectProject
- 第一个资源icon飞到资源栏时,资源栏图标开始跳动;最后一个资源icon飞到资源栏,资源栏图标停止跳动。
-
资源进度条、数量增长。
收取资源效果预览:
1. 金币等资源icon飞入资源栏
github地址ResEffectProject,主要文件是ResEffect.cs
关键有5点:
- 每个资源icon的生成有一定时间间隔,不是同时生成。
- 使用协程
StartCoroutine(OnAnimation(...))
。 - 配置生成所有数量的资源icon总消耗时间,计算每个资源icon生成间隔。
- 然后通过Time.deltaTime计算本帧生成几个资源icon。
- 使用协程
if (_generateCount < count)
{
_generateTime += Time.deltaTime;
for (int i = 0; i < Mathf.Ceil(_generateTime / rate); i++) {
if (_generateCount < count)
{
// 生成资源icon
...
_generateCount++;
_generateTime -= rate;
}
else
{
break;
}
}
}
- 每个资源icon轨迹不能一致
通过一个控制点-生成资源图标后 扩散 形成不一样的轨迹ctrlPoints.Add(Random.insideUnitSphere * radius);
- 资源icon飞行有加速度
- 资源icon旋转动画
- 使用对象池管理资源icon
效果gif:
2. 资源栏图标跳动效果控制
通过ResEffect.cs文件中的Play函数参数 System.Action<int> onFinish控制;
-
参数value==0,表示第一个资源icon飞到资源栏
-- lua self.ResIcon[eType].transform:DOScale(Vector3(1.1, 1.1, 1.1), 0.2):SetEase(Ease.OutCubic):SetLoops(-1, Tweening.LoopType.Restart)
-
参数value==1,表示最后一个资源icon飞到资源栏
-- lua DOTween.Kill(self.ResIcon[eType].transform)
ResEffect.cs -Play函数:
/// <summary>
/// 播放特效
/// </summary>
/// <param name="type">类型</param>
/// <param name="source">起点坐标-世界坐标</param>
/// <param name="target">终点坐标-世界坐标</param>
/// <param name="count">粒子数量</param>
/// <param name="onFinish">完成后回调</param>
public void Play(int type, Vector3 source, Vector3 target, int count, System.Action<int> onFinish)
{
}
// 调用播放特效Play函数 在PlayAnim.cs文件
resEffect.Play (0, startImg.position, endImg.position, Random.Range(3, 100), (int value)=>{
if (value == 0)
{
Debug.Log("======>第一个资源icon飞到资源栏");
}
else if (value == 1)
{
Debug.Log("======> 最后一个资源icon飞到资源栏");
}
});
3. 资源进度条、数量增长
效果简单,主要与资源栏图标跳动效果一样, 通过System.Action<int> onFinish控制;