征服Unity3dunity3D技术分享Unity分享

Unity 海岛奇兵资源收取效果(6)

2018-01-16  本文已影响169人  云木unity

收取资源效果分为3个部分:

  1. 金币等资源icon飞入资源栏(对资源icon做对象池)。github地址ResEffectProjecthttps://github.com/GeWenL/ResEffectProject
  2. 第一个资源icon飞到资源栏时,资源栏图标开始跳动;最后一个资源icon飞到资源栏,资源栏图标停止跳动。
  3. 资源进度条、数量增长。


    收取资源效果图.png

收取资源效果预览:


收取资源效果+资源栏图标跳动.gif

1. 金币等资源icon飞入资源栏

github地址ResEffectProject,主要文件是ResEffect.cs

关键有5点:

  1. 每个资源icon的生成有一定时间间隔,不是同时生成。
    1. 使用协程StartCoroutine(OnAnimation(...))
    2. 配置生成所有数量的资源icon总消耗时间,计算每个资源icon生成间隔。
    3. 然后通过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;
        }
    }
}
  1. 每个资源icon轨迹不能一致
    通过一个控制点-生成资源图标后 扩散 形成不一样的轨迹ctrlPoints.Add(Random.insideUnitSphere * radius);
  2. 资源icon飞行有加速度
  3. 资源icon旋转动画
  4. 使用对象池管理资源icon

效果gif:


收取资源-11个金币.gif 收取资源-45个金币.gif

2. 资源栏图标跳动效果控制

通过ResEffect.cs文件中的Play函数参数 System.Action<int> onFinish控制;

  1. 参数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)
    
  2. 参数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控制;

相关文章

  1. Unity实现类似【海岛奇兵】探索场景概览1
  2. Unity实现UI信息跟随场景移动缩放-海岛奇兵2
  3. Unity透视相机下场景移动缩放-海岛奇兵3
  4. Unity透视相机下地图边界处理-海岛奇兵4
  5. Unity Pinch手势缩放(Zoom)聚焦-海岛奇兵5
上一篇 下一篇

猜你喜欢

热点阅读