当前位置: 首页 > news >正文

unity关于匀速移动某些值的方法

可能很多人会用到Verctor3.Lerp、Mathf.LerpUnclamped等等
这种其实不是匀速
看一下这个整体差不多的逻辑

  public static float Lerp(float a, float b, float t){return   a + (b - a) * t;};

这个逻辑就是,从a值到b值,返回一个a值加(b值-a值)百分比t的值给你。。。写完发现有点白给。
如果不理解我举个例子
我在原点出发,我坐标是a = 0,我要去 b = 10米的地方(终点)
t值是1
代入公式 (b - a) * t 《转换到右边》 (10-0)*1 = 10米
然后就是 a + (b - a) *t 《转换到右边》 0+10 = 10米

结果返回10 = b,我瞬移到了终点(结束)

t值是0.5f
代入公式 (b - a) *t 《转换到右边》(10-0)*0.5f = 5米
然后就是 a + (b - a) *t 《转换到右边》 0+5 = 5米

结果返回5 != b,此时我的a变成5,第二帧继续下面(为什么a变成5,不知道的翻到最底下的扩展)

代入公式 (b - a) *t 《转换到右边》(10-5)*0.5f = 2.5米
然后就是 a + (b - a) *t 《转换到右边》 5+2.5 = 7.5米

结果返回7.5 != b,此时我的a变成7.5,第三帧继续下面

代入公式 (b - a) *t 《转换到右边》(10-7.5)*0.5f = 1.25米
然后就是 a + (b - a) *t 《转换到右边》 7.5+1.25= 8.75米

结果返回8.75 != b,此时我的a变成8.75,第四帧继续,a会一直逼近b=10的值
这能理解了吧,如果还不能理解就再看多几遍
如果还看多几遍还看不懂就评论区告诉我哦 ^ _ ^ (你敢,我四十米的)

t值是0
代入公式 (b - a) *t 《转换到右边》(10-0)*0 = 0米
得到的永远是0,所以不会变化

扩展:为什么a变成5,你可以理解成是一个迭代的方法,如下

   public  void Lerp(ref float a, float b, float t){a = a + (b - a) * t;if(a!=b){Lerp(ref  a,b,t);}}

好了,学了上面这个的Lerp的原理,我们就可以吃正餐了

实现匀速变化值的方法,或者匀速移动的方法
1、自己写一个协程,定义个时间或者每次变化的插值
2、用dotween,我就是为了讲这个
在这里插入图片描述
这个是官方的方法,如果不会可以参照我下面的代码
我用DOTween.To(()=> myFloat, x=> myFloat = x, 52, 1);来做实战例子

    RightBtn.onClick.AddListener(() =>{if (CurrentPage > 0){CurrentPage--;//页数(我这里做的是一个匀速翻页的功能)targetNormalizedPosition = CurrentPage / (Pages - 1f);//目标点DOTween.To(()=> scrollrect.horizontalNormalizedPosition, x =>{scrollrect.horizontalNormalizedPosition = x;//这里将x的值 赋值 到我要移动的scrollrect组件 的坐标上}, targetNormalizedPosition, 1);}});

对比DOTween.To(()=> myFloat, x=> {myFloat = x}, 52, 1);
简化DOTween.To(()=> 目标值, x=> {实现逻辑}, 终值, 时间);

还有不理解在评论区说一下哦

http://www.lryc.cn/news/97363.html

相关文章:

  • 解决VScode下载太慢的问题记录
  • Gitlab服务器备份恢复及系统升级
  • docker入门讲解
  • 【Matlab】基于卷积神经网络的数据回归预测(Excel可直接替换数据))
  • 在Springboot集成Activiti工作流引擎-引入、调用,测试【基础讲解】
  • Java书签 #解锁MyBatis的4种批量插入方式及ID返回姿势
  • 在react项目中如何引入国际化
  • spring学习笔记十三
  • react native 本地存储 AsyncStorage
  • Postgresql数据库中的时间类型汇总
  • 算法刷题Day 51 最佳买卖股票时机含冷冻期+买卖股票的最佳时期含手续费
  • 编程导航算法村 第五关 | 白银挑战
  • (十六十七)时序数据库是怎么存储用户名和密码的从InfluxDB OSS迁移数据
  • 5分钟开发一个AI论文抓取和ChatGPT提炼应用
  • SK5代理与网络安全:保障爬虫隐匿性与HTTP连接稳定性
  • 基于4G网络的嵌入式设备远程升级系统设计与实现(学习一)
  • 陪诊小程序软件|陪诊系统定制|医院陪诊小程序
  • [数据集][目标检测]空中飞鸟目标检测数据集VOC格式4955张
  • 安徽现货黄金代理请看这篇
  • HTML JS实现点击按钮下载文件功能例子(C知道版)
  • 企业网络安全与数据保护合规建设 ——从合规运营到香港上市
  • antdv Select dropdownRender Input 不能输入的问题
  • PostgreSQL 查询json/jsonb是否存在某个片段
  • Spring 官方文档及相关资料的网址集合
  • hypery 十一、命令行
  • QT占位符 %n+arg()、QString的格式化arg(补零/进制转换)
  • 浙江大学第六周数据结构之06-图1 列出连通集
  • DNS缓存病毒防护43.227.220
  • Spring MVC -- 返回数据(静态页面+非静态页面+JSON对象+请求转发与请求重定向)
  • k8s集群部署(使用kubeadm部署工具进行快速部署,相关对应版本为docker20.10.0+k8s1.23.0)