Unity物体移动的几种方式与表现(Lerp,SmoothDamp,MoveTowards的区别)

这篇具有很好参考价值的文章主要介绍了Unity物体移动的几种方式与表现(Lerp,SmoothDamp,MoveTowards的区别)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity匀速移动的几种方案

看看Lerp,SmoothDamp,MoveTowards的区别。

速览

Lerp用于插值,本身不是用于移动的API。但可以和协程配合用于移动。
SmoothDamp用于移动,是阻尼移动,从不超过。
MoveTowards用于移动,是匀速移动,也不会超过。

方案1,使用Lerp——先快后慢运动(线性衰减) (不好用✖)

Lerp最简单的用法如下:

void Update(){
    transform.position = Vector3.Lerp(transform.position, endPos, Time.deltaTime / lerpDuration);
}

unity lerp移动,unity,unity,游戏引擎

效果是非匀速的(逐渐逼近),可以看到在接近终点时有明显的减速。
还有一个问题是不停在产生新的Vector3结构体
unity lerp移动,unity,unity,游戏引擎

方案2,使用Lerp也可以实现——平滑移动 (不好用✖)

Lerp控制三个变量,也是可以实现平滑移动的

void Update(){
 //  平滑版,引入startPos,lerpFinish,time 3个变量——太麻烦了
    if (!lerpFinish)
    {
        if (time == 0)
        {
            startPos = transform.position;
        }
        if (time < lerpDuration)
        {
            time += Time.deltaTime;
        }
        else
        {
            time = lerpDuration;
            lerpFinish = true;
        }
        transform.position = Vector3.Lerp(startPos, endPos, time / lerpDuration);
    }
}

unity lerp移动,unity,unity,游戏引擎

就是引入了三个新变量,而且必须是类的成员变量,太麻烦了。

方案3,使用协程+Lerp —— 匀速运动 (好用✔)

StartCoroutine(LerpSelf());
private IEnumerator LerpSelf()
{
    Vector3 startPos = transform.position;
    float time = 0;
    while (time < lerpDuration)
    {
        time += Time.deltaTime;
        transform.position = Vector3.Lerp(startPos, endPos, time / lerpDuration);
        yield return null;
    }
    transform.position = endPos;
}

unity lerp移动,unity,unity,游戏引擎

方案4,使用SmoothDamp —— 先快后慢运动(平方衰减) (好用✔)

void Update(){
    transform.position = Vector3.SmoothDamp(transform.position, endPos, ref velocity, 0.65f);
}

unity lerp移动,unity,unity,游戏引擎

方案5:使用MoveTowards —— 匀速运动 (好用✔)

void Update(){
    transform.position = Vector3.MoveTowards(transform.position, endPos, Time.deltaTime / lerpDuration * 20);
}

unity lerp移动,unity,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-779943.html

到了这里,关于Unity物体移动的几种方式与表现(Lerp,SmoothDamp,MoveTowards的区别)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理

    目录 Unity Android 之 读取下载获取移动端 sdcard 路径下的指定文件夹的所有图片的几种方式的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、简单实现步骤 五、关键代码 附录: 一、不同平台使用宏区分路径加载 二、Unity3D中的资源路径 三、Unity3D各平台路径(包括手

    2024年01月19日
    浏览(54)
  • Unity面向新手,如何使物体移动,让物体自由的动起来。几种移动方案讲解

    在大部分的Unity游戏开发中,移动是极其重要的一部分,移动的手感决定着游戏的成败,一个优秀的移动手感无疑可以给游戏带来非常舒服的体验。而Unity中有多种移动方法,使用Transform,使用刚体Rigidbody,使用CharacterController,使用NavMesh导航系统等等等等。当然,对于新手来

    2024年02月08日
    浏览(36)
  • Allegro在移动器件时,附着导线跟随器件移动的几种方式

    Allegro在移动器件时,导线跟随器件移动的几种方式,具体介绍如下: 1、Options选项卡 Ripup etch:移动器件时,附着的导线移掉。 Slide etch:移动器件时,附着的导线随器件一起移动并优化导线。 Stretch etch:移动器件时,附着的导线随器件以任意角度移动。 未移动时器件的位置

    2024年02月03日
    浏览(36)
  • Unity——数据存储的几种方式

    PlayerPrefs适合用于 存储简单的键值对数据 存储的数据会在游戏关闭后依然保持,并且可以在不同场景之间共享,适合用于需要在游戏不同场景之间传递和保持的数据。 它利用key-value的方式将数据保存到本地,跟字典类似。然后通过代码进行保存、读取、更新操作。值得注意

    2024年02月03日
    浏览(32)
  • UNITY--读取Excel的几种方式

    目录 一.DLL插件读取 1.1.Excel存放位置 1.2.使用示例 1.3.Excel格式  1.4.输出显示  1.5.所需插件 二.Excel转成Asset文件,再进行读取 2.1Excel文件存放位置 2.2 编辑模式生成Asset文件,并保存到指定位置  2.3创建ExcelRead脚本,读取Excel内容 2.4 创建数据存储脚本 2.5  编辑器生成Asset 与属

    2024年01月20日
    浏览(40)
  • Unity解析JSON的几种方式

    1.使用JsonUtility(Unity自带)解析数据 踩坑 2.使用Newtonsoft.Json dll解析json 链接: link 3.使用LitJson解析数据 4.传递给前端或后端 json

    2024年02月16日
    浏览(34)
  • Unity按钮事件的几种绑定方式

    许久没有写C#代码了,对于一些东西自己给整忘了,在此记录下,方便以后自己查阅 获取到按钮组件,我是将代码挂载在其父节点上。 在代码中获取此按钮,并对他就进行绑定。一般都是使用的这类情况。 在脚本中写一个public函数,作为按钮的监听函数,在按钮的Inspector面

    2024年02月11日
    浏览(34)
  • Unity中获取游戏对象的几种方式

    在学习如何获取物体和组件时先明白说明什么是物体,组件和对象。 物体:unity中在层级显示的东西都可以叫做物体 组件:unity中提供了大量已经写好的组件,比如刚体,碰撞体等,自己 编写的脚本也是一种组件类 对象:挂载到物体上的脚本是一个实例化的组件,也就是一

    2024年01月17日
    浏览(24)
  • Unity中常用的几种读取本地文件方式

    使用的命名空间如下 using LitJson; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; using UnityEngine.Networking; 1、通过UnityWebRequest获取本地StreamingAssets文件夹中的Json文件 View Code 2、通过UnityWebRequest和StreamReader读取本地StreamingAssets文件夹中的Json文件 View Code  3、通

    2024年02月04日
    浏览(33)
  • Unity笔记:数据持久化的几种方式

    主要方法: ScriptableObject PlayerPrefs JSON XML 数据库(如Sqlite) PlayerPrefs 存储的数据是 全局共享 的,它们存储在用户设备的本地存储中,并且可以被应用程序的所有部分访问。这意味着,无论在哪个场景、哪个脚本中,只要是同一个应用程序中的代码,都可以读取和修改 Playe

    2024年02月19日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包