通过触摸屏幕/鼠标 图片跟随手指 加滑动效果

《领导关怀版本 需求3》
一:图片本地加载,打字效果,循环播放
二:通过触摸屏幕/鼠标 滑动
三:跟随手指,滑动效果
版本系列(一):实现了读取本地图片,循环播放功能
版本系列(二):原来的基础上,实现了触摸屏手指滑动,无操作一段时间自动循环播放
版本系列(三):前两版基础上,实现了触摸屏图片跟随手指滑动,滑动力度,实现缓动惯性效果

奈何客户需求无止尽,不断产品功能,增强体验。
在这里插入图片描述
码农感悟大部分程序都是这样,
实现了代码优化,先实现功能需求,再考虑代码性能优化。

    /// <summary>
    /// 手指跟随图片  一开始位置用的是Lerp,现在直接等于增量的位置 1:1
    /// </summary>
    public float DataSpeed = 0.09f;
    /// <summary>
    /// 记录增量
    /// </summary>
    public List<Vector2> PointerEventData;

因为在项目工程测试是鼠标点击操作的,所以只需要鼠标增量列为速度,逐渐移动图片位移即可,但实际操作触摸屏,手指松开,会有增量为0的情况,解决办法,取范围内增量的平均值。

    /// <summary>
    /// 鼠标拖动物体移动
    /// </summary>
    /// <param name="data"></param>
    public void fn_MoveObj(BaseEventData data)
    {
        var v = (data as PointerEventData).delta.x * DataSpeed;
        PointerEventData.Add((data as PointerEventData).delta);//触摸屏
        actions?.Invoke(v);
    }
    Coroutine coroutines;
    public void End_MoveObj()
    {
        float DeltaSpeed = 0;
        int count = 0;
        for (int i = Mathf.Max(0, PointerEventData.Count - 5); i < PointerEventData.Count; i++)
        {
            if (Mathf.Abs(PointerEventData[i].x) <= 0.2f)
            {
                continue;
            }
            DeltaSpeed += PointerEventData[i].x;
            count++;
        }
        Debug.Log(Mathf.Min(5, PointerEventData.Count));
        DeltaSpeed = DeltaSpeed / count; /*Mathf.Min(5, DrugUI.instance.PointerEventData.Count);*/
        test.text = (DeltaSpeed).ToString();
        coroutines = StartCoroutine(fn_SpeedMove(DeltaSpeed));
        //EndActions?.Invoke(DeltaSpeed);
        PointerEventData.Clear();//清空
    }
    /// <summary>
    /// 加缓动惯性协程
    /// </summary>
    /// <param name="speed"></param>
    /// <returns></returns>
    IEnumerator fn_SpeedMove(float DeltaSpeed)
    {
        while (Mathf.Abs(DeltaSpeed) > 0.2f)
        {
            DeltaSpeed = Mathf.Lerp(DeltaSpeed, 0, 0.05f);
            actions?.Invoke(DeltaSpeed);
            yield return null;
        }
    }
    public void StopCoroutine()
    {
        if (coroutines != null)
            StopCoroutine(coroutines);
    }

在这里插入图片描述
效果图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值