【unity每日一记】—线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

简介: 【unity每日一记】—线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

在这里插入图片描述


👨‍💻个人主页@元宇宙-秩沅

**hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!**

本文由 秩沅 原创

收录于专栏 [unity常用API]


⭐相关文章:基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API

⭐相关文章:关于游戏剧情模式中用到的基础简单API

⭐相关文章:控制游戏人物移动的细节到底有多少?

⭐相关文章:坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)


⭐基于unity实现物体移动与模拟刹车的细节处理⭐

@[TOC]


所有线性有关的差值函数都运用到物体移动的情况,以下四种是常见且重要的API,他们的区别和用法详解如下。这里主要以二维向量为例子,三维以此类推。

如图: a点物体到b点物体用差值函数进行移动
在这里插入图片描述


👨‍💻Lerp(a,b,t) 限制性差值


文档:Lerp(a,b,t) 限制性差值

gameObject.transform.position = Vector2.Lerp(a.position,b.position ,speed);
让物体A到B进行差值移动

  • 场景应用实现

在这里插入图片描述

==可以看出使用lerp()用到物体运动身上并不是匀速的,因为此时每一次差值完之后,都是用差值完后的两点距离再进行差值、==


  • 向量含义图:

在这里插入图片描述

图中的黑点就是又无数个任意取差值的点 ,范围为(0,1)


  • 应用示意图

在这里插入图片描述

按照差值进行移动,但只只进行一次,所以将其放在update函数里面,实现作用于a向b点移动

如果此时要让其变成匀速只需要让其加上前一次差值过的数值,即可实现匀速移动

  speed += persent * Time.deltaTime;
  gameObject.transform.position =  Vector2.Lerp(a.position,b.position ,speed);
  • 修改代码后的效果图:

在这里插入图片描述


👨‍💻MoveTowards(a,b,t) 匀速步频


文档:MoveTowards(a,b,t)

  • 相比上面MoveToward 也是匀速运动用到较多的函数,并且相较于上面大家可以直接使用movetowards 进行物体的匀速运动
  • 此时的t 作为步频,也可以理解为移动的频率

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

    在这里当然我将速度从0.01改成了0.05,但是匀速效果还是显而易见的,只是由于电脑原因导致了一下卡帧


👨‍💻LerpUnclamped(a,b,t)非限制差值


文档:LerpUnclamped(a,b,t)

  • 此时就是非限制性差值了,也就是说我们的t可以随便取值,不再是0到1范围内取值,这就意味着它的差值会超过两点本身的距离

  • 向量图:

在这里插入图片描述

  • 效果图

    gameObject.transform.position = Vector2.LerpUnclamped (a.position,b.position ,speed);

在这里插入图片描述

==此时我将 t 变为1.3 ,这时可以看到物体A 超出了B,原因是差值超过两点本身的距离,之后又和B重合==


👨‍💻smoothDamp(a,b,v,t)平滑阻尼


文档:smoothDamp(a,b,v,t)

  • 平滑阻尼,==应用于汽车刹车==,想象一下汽车刹车,特别是速度快的是不是还要向前摩擦行驶才停下来,效果就是如此
  • v 是速度 ,t 是平滑时间

    Vector2 vority = new Vector2(0.1f, 0);

     gameObject.transform.position =  Vector2.SmoothDamp(a.position,b.position, ref vority  ,speed); 、
    

  • 我将阻尼时间 t = 设为0.1 的效果图

在这里插入图片描述

>可以看到阻尼效果

  • 我将阻尼时间 t = 设为0.5 的效果图

在这里插入图片描述

可以看到阻尼时间越长越慢


  • 我将阻尼时间 t = 设为0 的效果图

在这里插入图片描述

可以看到丝毫没有阻尼效果


👨‍💻结论


  • 👍Lerp () 先慢后快
  • 👍moveTowards ()匀速
  • 👍smoothDamp() 模拟制动系统


⭐相关文章:基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API

⭐相关文章:关于游戏剧情模式中用到的基础简单API

⭐相关文章:控制游戏人物移动的细节到底有多少?

⭐相关文章:坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!

目录
相关文章
|
2月前
|
图形学 人工智能 C#
从零起步,到亲手实现:一步步教你用Unity引擎搭建出令人惊叹的3D游戏世界,绝不错过的初学者友好型超详细指南 ——兼探索游戏设计奥秘与实践编程技巧的完美结合之旅
【8月更文挑战第31天】本文介绍如何使用Unity引擎从零开始创建简单的3D游戏世界,涵盖游戏对象创建、物理模拟、用户输入处理及动画效果。Unity是一款强大的跨平台游戏开发工具,支持多种编程语言,具有直观编辑器和丰富文档。文章指导读者创建新项目、添加立方体对象、编写移动脚本,并引入基础动画,帮助初学者快速掌握Unity开发核心概念,迈出游戏制作的第一步。
48 1
|
2月前
|
算法 vr&ar C#
使用Unity进行虚拟现实开发:深入探索与实践
【8月更文挑战第24天】使用Unity进行虚拟现实开发是一个充满挑战和机遇的过程。通过掌握Unity的VR开发技术,你可以创造出令人惊叹的VR体验,为用户带来前所未有的沉浸感和乐趣。随着技术的不断进步和应用场景的不断拓展,VR开发的未来充满了无限可能。希望本文能为你提供有用的指导和启发!
|
2月前
|
API 开发工具 图形学
PicoVR Unity SDK⭐️五、常用API接口函数一览
PicoVR Unity SDK⭐️五、常用API接口函数一览
|
vr&ar 图形学 Android开发
使用Unity构建增强现实应用程序:从理论到实践
大家好!在今天的博客文章中,我将与大家分享如何使用Unity构建增强现实(AR)应用程序。AR是一项令人兴奋的技术,它将虚拟元素与现实世界相结合,为用户创造出令人难以置信的交互体验。Unity作为一种强大的游戏开发引擎,也可以用于构建AR应用程序,并且提供了丰富的工具和功能来简化开发过程。 在本文中,我们将从理论到实践逐步介绍AR应用程序的构建过程。让我们开始吧!
163 0
|
图形学
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
103 0
|
图形学
【unity每日一记】--控制游戏人物移动的细节
【unity每日一记】--控制游戏人物移动的细节
183 0
|
图形学 索引
【unity每日一记】--Vector的实质
【unity每日一记】--Vector的实质
60 0
|
图形学 索引
【unity每日一记】--transform组件篇
【unity每日一记】--transform组件篇
160 0
|
图形学 索引
【unity每日一记】-物体创建,获取,查找,继承
【unity每日一记】-物体创建,获取,查找,继承
113 0
|
API 图形学
【unity实践demo】unity-2D游戏官方案例【2】
【unity实践demo】unity-2D游戏官方案例【2】
267 0