【UE】一个需求案例掌握Timeline和插值Lerp

news2025/2/2 5:45:18

文章目录

  • 问题背景
  • 结论先行
  • timeline和lerp原理
  • 使用timeline+lerp实现相机平滑跟随
  • BUG猜想
  • 验证和解决

问题背景

今天用timeline+lerp插值做了一个相机平滑跟随的需求

如果只是要求跟随,直接在tick中把相机位置设置成角色位置就可以

但希望有一个相机滞后角色一点点的平滑效果

就可以用timeline+lerp来做
在这里插入图片描述
但是做完上述连连看,发现在跟随过程中角色会发生抖动

结论先行

原因是用了timeline的play而不是play from start

区别:

  1. Play:从上一次调用结束时的位置开始
  2. Play from Start:从头开始

timeline和lerp原理

timeline的每次play会按照时间输出一个值。可以理解为横轴是时间,纵轴是输出的值。指定完曲线以后,timeline根据当前时间(横轴的值)在纵轴上取出对应的值返回
在这里插入图片描述
lerp是插值,根据已知数据点预测中间内容的一种方法。比如:C是已知点A、B中间的一个未知点,C的值可以通过插值计算。最简单的一种插值: C = ( A + B ) ÷ 2 C=(A+B)\div2 C=(A+B)÷2

UE的浮点插值计算公式是: C = ( 1 − α ) × A + α × B C=(1-\alpha)\times A+\alpha\times B C=(1α)×A+α×B
在这里插入图片描述

使用timeline+lerp实现相机平滑跟随

好了,你已经学会timeline和lerp了,现在开始写一个UE 小游戏吧
了解了timeline+lerp的原理我们就知道,lerp需要一个乘在B前面的 α \alpha α系数。

按照下图编排,如果设置 α = 1 \alpha=1 α=1,则 C = ( 1 − α ) × A + α × B = B C=(1-\alpha)\times A+\alpha\times B=B C=(1α)×A+α×B=B 那么这跟我们直接把相机位置C设置为玩家位置B的效果是一样的
在这里插入图片描述
为了实现相机落后角色一点点的跟随感,这里α需要一个(0,1)的值。可以直接粗暴设置为0.5。实现的效果就是: C = ( A + B ) ÷ 2 C=(A+ B)\div2 C=(A+B)÷2

但直接粗暴0.5设置同样会导致角色抖动。原因是一下子相机移动幅度太大,从左边跳到右边,就导致角色映射到相机上的位置一下在左边一下在右边,体感上就是抖动了

那我们把α设小一点,让相机移动幅度不要太大,是不是就可以了?
答案:是

但是手动设置有如下缺点:

  1. 需要精细地调整:如果α设小了,不抖动了。但相机移动速度会有点慢。这时候如果角色移动速度很快,相机会跟不上角色。所以具体的值还需要自己调整,直到找到一个看起来不抖动而且移动速度尚可的数值(当然希望精确控制可以直接用lerp)
  2. 不好维护:如果改动了角色的移动速度,这个α也需要同步调整。当然可以把α设置为一个根据角色移动速度计算出来的值。但这个要怎么计算也需要慢慢试

当然手动设置可以更精确地控制(就是太麻烦了)

所以这里引入定时器+timeline来帮我们控制alpha

BUG猜想

为了节约性能,这里采用了0.03s更新一次,这个间隔比较大,而且使用的timeline引脚是从当前位置开始的Play,α有了一个初值。导致两次调用timeline的时候返回的值差距很大

不均匀且有点大的α就导致了抖动

验证和解决

验证:减小更新间隔,换成每次tick更新一次。不抖动√

解决1:减小更新间隔
解决2:将timeline的驱动引脚换成play from the start

方案1会造成更大的性能开销。故使用方案2√

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何避免ChatGPT,ChatGLM这类大语言模型胡说八道

“ ChatGPT,ChatGLM这类大语言模型一本正经的胡说八道,可能也是它创造性回答的部分。那么谁来判断它在编造无中生有的内容?恐怕只有人才能判断。模型怎么会产生幻觉,我们又怎么避免它产生幻觉?” 01 — 昨天体验了国产…

快上车,搭乘HUAWEI HiCar驶向未来

HUAWEI HiCar(以下简称HiCar)是华为提供的人-车-家全场景智慧互联解决方案,连接手机与车辆,充分发挥各自的优势属性,将手机的应用/服务生态延伸进车辆,实现以手机为核心的全场景体验。消费者通过HiCar可以感…

HTML 超链接标签、图片标签

超链接标签 超链接描述 HTML使用标签<a>来设置超文本链接 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 <a href"url">链接文…

【运维】Linux升级Python2

【运维】Linux升级Python2 操作系统&#xff1a;centos7python版本&#xff1a;升级前版本2.7.5&#xff0c;升级后2.7.18python3版本&#xff1a;升级前3.6.8&#xff0c;升级后版本3.8.8 1、查看当前python版本 [root1 ~]# python -V Python 2.7.5 2、yum安装python [roots14…

Apikit 自学日记:发起文档测试-Websocket

Websocket 进入某个WS协议的API文档详情页&#xff0c;点击文档上方 测试 标签&#xff0c;即可进入 API 测试页&#xff0c;系统会根据API文档的定义的求头部、Query参数、请求体自动生成测试界面并且填充测试数据。 填写/修改请求参数 1.1设置请求头部&#xff08;Header&…

Rovio智能车改锂电经验分享

目录 小车简介 改造思路 改造目的 步骤一、改锂电 电压检测 充电检测 结束语 本文介绍如何给wowwee Rovio智能车改电源过程。 首先介绍硬件情况 小车简介 小车功能强大&#xff0c;带红外定位&#xff0c;带缺电自动归位&#xff0c;带轨迹录制回放&#xff0c;带扬声器…

【PostgreSQL 数据库线下沙龙(武汉站)】PieCloudDB:云原生分布式虚拟数仓的诞生之旅...

2023年6月3日&#xff0c;开源软件联盟 PostgreSQL 中文社区在武汉举办了技术沙龙活动。本次活动主题围绕未来数据库展开讨论和分享。通过探讨未来数据库的概念和特点&#xff0c;为智能化时代的发展提供更多的支持和服务。同时&#xff0c;通过探讨数据库和AI技术的共生共荣&a…

基于SpringBoot的美食点评系统

1.引言 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 美食点评管理系统&#xff0c;主要的模块包括首页、个人中心、用户管理、餐厅管理、美食餐厅管理、地区管理、菜系管理、餐厅点评管理、系统…

短视频矩阵抖音账号矩阵系统源码开发者自研(一)

一、短视频矩阵系统源码框架建模搭建 目录 一、短视频矩阵系统源码框架建模搭建 1.抖音账号矩阵系统功能模型建模 2.短视频账号矩阵系统接口开发规则 二、短视频矩阵系统源码视频剪辑转码处理 短视频矩阵系统是一个多功能的视频内容管理系统&#xff0c;用于创建、剪辑发布…

vue3-多人聊天室角色识别(全栈)

文章目录 主要技术栈目的实现步骤1. 前端发送信息2. 后端处理数据3. 前端渲染数据4. store 主要技术栈 主要技术栈是vue3&#xff0c;springboot&#xff0c;websocket&#xff0c;element-plus 目的 主要目的是复习和梳理 实现步骤 1. 前端发送信息 发送信息&#xff0c…

【Spring Cloud系列】-负载均衡(Load Balancer,LB)

【Spring Cloud系列】-负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09; 文章目录 【Spring Cloud系列】-负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09;一、什么是负载均衡&#xff08;Load Balancer&#xff0c;LB&#xff09;二、负载均衡的主要…

【MySQL】MySQL中SQL执行流程

文章目录 一、MySQL语句执行流程1.1、主要的原因有以下几点1.2、具体执行流程图如下 二、存储引擎三、MySQL的架构与内部模块四、崩溃恢复时如何判断事务是否需要提交 一、MySQL语句执行流程 连接器&#xff08;Connector&#xff09;&#xff1a; 当客户端发送一个连接请求时…

设计模式学习之观察者模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式设计模式学习之抽象工厂模式设计模式学习之策略模式和简单工厂模式的对比 这是设计模式系列的第7篇文章&#xff0c;在这之前我们已经介…

React函数式组件

1. 创建函数式组件 我们可以通过所定义的函数来进行react中组件的定义。首先我们可以定义一个函数&#xff0c;然后通过函数的返回值来进行相关组件的定义。例如下面这张写法&#xff0c;我们可以通过调用一个函数&#xff0c;通过其返回值来进行相关的操作。 function Test()…

chatgpt赋能python:Python遍历A到Z:SEO优化的关键

Python遍历A到Z&#xff1a;SEO优化的关键 对于任何一家网站来说&#xff0c;SEO (Search Engine Optimization, 搜索引擎优化)都是至关重要的&#xff0c;特别是在当今数字时代&#xff0c;人们常常会在搜索引擎中查找信息并浏览不同网站。其中一个重要的SEO策略是为每个网站…

笔记本安装双系统ubuntu时踩的坑——戴尔

如果你遇到以下的这些问题&#xff0c;不要直接装了&#xff0c;无解&#xff01;&#xff01;&#xff01; 建议看我另一篇教程&#xff0c;把硬盘取出来在另外的电脑上装好系统再放回去&#xff0c;这样嘎嘎快。 移动硬盘中安装Ubuntu 20.04系统——立省99%的问题_放风筝的…

水质监测的重要性及应用

水质监测是保障水环境安全和人民健康的重要手段。随着城市化进程的加速和工业化程度的提高&#xff0c;水污染问题日益严重&#xff0c;水质监测的重要性也越来越凸显。水质监测是指对水体中的各种物理、化学和生物参数进行监测和分析&#xff0c;以评估水体的质量和污染程度。…

概率论--随机事件与概率--贝叶斯公式--随机变量

目录 随机事件与概率 概念 为什么要学习概率论 随机事件与随机事件概率 随机事件 随机事件概率 贝叶斯公式 概念 条件概率 概率乘法公式 贝叶斯公式 举个栗子 随机变量 随机变量的定义 随机变量的分类 离散型随机变量 连续型随机变量 随机事件与概率 概念 …

和Git相关的一些问题

1. Git拉取项目的两种方式以及区别 方式 Http&#xff1a;通过http方式的clone项目&#xff0c;不需要在git上手动绑定ssh&#xff0c;只需要在clone的时候输入账号&#xff0c;密码即可&#xff1b;SSH&#xff1a;通过ssh方式clone项目&#xff0c;需要手动绑定ssh密钥 区别 …

Linux——从零到精通

目录 前言&#xff1a; 一.Linux介绍 二.Linux基础命令 三.链接和文章从零到实战 基本信息介绍 Linux 操作系统的诞生、发展和成长过程始终依赖着五个重要支柱&#xff1a; 桌面环境 Linux为什么象征着企鹅 命名与读法 前言&#xff1a; 本篇文章结合所有从零到精通 Linux…