[Unity] 使用Mathf函数实现平滑移动物体的7种方法

这篇具有很好参考价值的文章主要介绍了[Unity] 使用Mathf函数实现平滑移动物体的7种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Unity中要利用Mathf中的函数实现物体的平滑运动,有以下7种方法:

//使用Mathf.PingPong()函数在初始位置和X=311之间往复运动
rectTransform.anchoredPosition = 
new Vector2(Mathf.PingPong(
Time.time * 100, 311), rectTransform.anchoredPosition.y);
//物体就像乒乓球一样,在X轴上往复运动

//使用Mathf.Repeat()函数在初始位置和X=311之间循环移动
rectTransform.anchoredPosition = 
new Vector2(Mathf.Repeat(
Time.time * 100, 311), 0);
//与PingPong()的区别是,Repeat()函数只会沿着一个方向移动,
//到达目标位置后会直接回到初始位置

//使用Mathf.Lerp()函数移动到X=311的位置
rectTransform.anchoredPosition = 
new Vector2(Mathf.Lerp(
rectTransform.anchoredPosition.x, 311, 0.01f), 
rectTransform.anchoredPosition.y);
//逐渐减速的运动,无限接近目标值,但永远无法达到
//可以配合IF条件来达到目标位置

//使用Mathf.LerpUnclamped()函数移动到X=311的位置
rectTransform.anchoredPosition = 
new Vector2(Mathf.LerpUnclamped(
rectTransform.anchoredPosition.x, 311, 1.1f), 
rectTransform.anchoredPosition.y);
//类似使用Mathf.Lerp()函数移动
//与Mathf.Lerp()的区别是,不限制t的值在0到1之间
//超过0-1之间的t值会使得物体在两个位置不断闪烁

//使用Mathf.SmoothStep()函数移动到X=-780的位置
rectTransform.anchoredPosition = 
new Vector2(Mathf.SmoothStep(
rectTransform.anchoredPosition.x, -780f, 0.03f), 
rectTransform.anchoredPosition.y);
//逐渐减速的移动,移动速度取决于t
//无限接近于目标位置,但无法到达目标位置
//与Mathf.Lerp()函数非常类似,相比较起来,
//Mathf.SmoothStep()函数开始移动的比Mathf.Lerp()更快,
//但是后来移动的比Mathf.Lerp()慢
//Lerp像是线性衰减,而SmoothDamp更像是弧形衰减

//使用Mathf.MoveTowards()函数移动到X=100的位置
rectTransform.anchoredPosition = 
Vector2.MoveTowards(
rectTransform.anchoredPosition, new Vector2(
100, rectTransform.anchoredPosition.y), 50 * Time.deltaTime);
//均速运动,速度取决于maxDistanceDelta

//使用Mathf.SmoothDamp()函数移动到X=0的位置
float velocity = 0f;
rectTransform.anchoredPosition = 
new Vector2(Mathf.SmoothDamp(
rectTransform.anchoredPosition.x, 0, ref velocity, 0.25f,Mathf.Infinity), 
rectTransform.anchoredPosition.y);
//逐渐减速的运动,可以到达目标位置,到达目标位置后会在目标位置附近的一小段距离内随机运动
//到达目标位置的速度取决于smoothTime的值,越小越快
//velocity的值会随着函数的调用而改变
//velocity默认为0即可,如果设置了非0数,则移动到目标位置的误差会变大

Mathf.SmoothDamp、Mathf.Lerp、Mathf.SmoothStep三个方法非常相似,分别使用三个方法移动同一个物体的效果如图所示:

unity 平滑移动,unity,游戏引擎

可以看出,三者均是先快后慢,但SmoothDamp方法会有一些卡顿;SmoothStep与Lerp比较起来,Mathf.SmoothStep函数开始移动的比Mathf.Lerp更快,但是后来移动的比Mathf.Lerp慢,Lerp像是线性衰减,而SmoothDamp更像是弧形衰减。

SmoothDamp方法移动没有速度的上限(速度上限可以通过参数设置),且能根据目标位置的距离来自动调整移动速度;而另外二者速度仅与参数设置有关,与目标位置无关。

如果要实现类似宠物跟随主人移动的效果,SmoothDamp方法更适合;实现摄像头跟随主角的效果,SmoothStep与Lerp可根据情况选择;要实现匀速运动,选择MoveTowards方法。文章来源地址https://www.toymoban.com/news/detail-526252.html

到了这里,关于[Unity] 使用Mathf函数实现平滑移动物体的7种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D 基础——使用 Mathf.SmoothDamp 函数制作相机的缓冲跟踪效果

    使用 Mathf.SmoothDamp 函数制作相机的缓冲跟踪效果,让物体的移动不是那么僵硬,而是做减速的缓冲效果。将以下的脚本绑定在相机上,然后设定好 target 目标对象,即可看到相机的缓动效果。通过设定 smoothTime 的值,可以调节缓动效果的持续时间。 Mathf-SmoothDamp - Unity 脚本 A

    2024年01月16日
    浏览(52)
  • 【Unity入门】物体5种移动方法

    利用修改Transform组件的position的两种常用方法。 使用Translate()函数 直接指定新的位置 将上述两种方法在 void Update()实现每一帧物体向x方向移动1.5个单位,具体代码如下: 注意:此处1.5为啥要写1.5f,根据C#的语法规定,直接写1.5会被认为double类型的数,而这里需要flaot类

    2024年02月02日
    浏览(42)
  • 【Unity】如何优雅地移动物体-8个方法

    在游戏开发中,如何移动物体?是我们需要思考的事情。 Unity 引擎也提供了众多的方法,每个开发者的使用习惯也各不相同,所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。 那么,这篇文章,我想分享一下移动物体的一些方法和优缺点。 仓库地址 如何优雅

    2023年04月09日
    浏览(42)
  • 【Unity每日一记】让一个物体按余弦曲线移动—(三角函数的简单运用)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月13日
    浏览(51)
  • Unity 通过键盘鼠标控制物体移动、旋转、缩放的方法

    在Unity中,使用键盘ADWS键控制物体移动,通过鼠标左键控制物体旋转,鼠标中键控制物体缩放是再常见不过的方法。 方法如下:  效果如下:Unity 通过键盘鼠标控制物体移动、旋转、缩放_哔哩哔哩_bilibili

    2024年02月03日
    浏览(46)
  • 【Unity】Mathf常用数学函数

    Unity 的 Mathf 类提供了一组常见的数学函数,包括三角函数、对数函数以及游戏和应用开发中常用的其他函数。 1.Deg2Rad:度到弧度换算常量 度到弧度换算常量 = (PI * 2) / 360 2.Epsilon:微小浮点值 浮点数可以与零相差的最小值。 采用以下规则: 任何值 + Epsilon = 任何值 任何值

    2024年04月23日
    浏览(38)
  • 【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐相关文章: 线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp) ⭐相关文章:基础不牢,地动山摇系列 ------ 软

    2024年01月16日
    浏览(38)
  • 【笔记】Unity2D角色和物体移动的几种方法

    在Unity中对于物体移动有多种方法,这里根据b站up主【鼓励Jun】的视频整理了一些笔记 变量声明: 位移向量var dir=new Vector3(deltax.deltay,deltaz); 移动速度var speed=2; ps:变量声明都在主要都在方法外,实际位移操作则在Update方法中。 #键盘输入,这里举一个只x轴上移动的例子,y轴同

    2023年04月08日
    浏览(55)
  • 使用Unity的Input.GetAxis(““)控制物体移动、旋转

    ​Input.GetAxis(\\\"\\\") 是 Unity 引擎中的一个方法,用于获取游戏玩家在键盘或游戏手柄上输入的某个轴(Axis)的值。这里的 \\\"\\\" 是一个字符串参数,表示要获取的轴的名称。只要游戏运行Unity在后台就实时通过GetAxis这些定义好的方法帮你检测用户键盘、手柄、鼠标,你只需要用这个

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包