Unity Notes之屏幕触点轨迹的平滑

Unity UGUI 按钮呈半圆型滑动的无限列表 可左右镜像排列 上一篇是实现了按钮可拖拽并自动吸附在屏幕两侧,接着呈半圆分布。之前是道具按钮比较少的情况,道具按钮一多,屏幕空间又局促的情况下,按钮就要适当隐藏了,所以做成一个可以滑动的列表。滑动的轨迹是一个圆形。这个需求还挺有意思的,记录一下代码: using DG.Tweening; using System.Collections; using UnityEngine; using UnityEngine.UI; usi... 阅读详情

最近在做一个移动设备上的触控系统需求,基本的要求点是,通过手指在屏幕上指定区域内的滑动点击来控制一个对象在空间或屏幕上的位置移动。具体的应用场合:

  • 通过屏幕点击来精确控制对应的武器光标的位置;
  • 得到较为精确且平滑的、用户在屏幕拖拽移动时的拖尾效果;
以及其他应用等。直接的实现也比较简单,通过捕获Input.touch上的touch点并记录对应的位置,然后将屏幕位置序列转换为目标位置信息即可。

但是这里边会遇到一个问题,移动设备直接得到的Input中的touch信息其实是有噪声的,这些噪声一方面来自于硬件touch感应设备,另外一些来自于用户自己的操作,而噪声在使用中的表现就是转换后的信号会有较大的jitter现象。比如用来控制一个屏幕上的光标,那么这个光标的位置可能就会一直在抖动。因而如果对信息的平滑度要求过高的话必须得对这些原始的输入信号进行滤波才可以,即在输入的触点信号上施加一个低通滤波器,以便过滤掉其中的高频信息保留较为稳定的低频信息。

为了良好的用户体验,这里对使用的一个较合理的低通滤波器的设计要求如下:

  1. 低速移动下的误差不能太大,否则用户不能实现精确控制;
  2. 高速移动下的迟滞不能太大,否则用户感觉系统反应迟钝;

单纯的不考虑速度的低通滤波器(如Unity doc中关于multi touch所提供的低通滤波方法)虽然可以得到平滑的目的,但是却会带来较大的迟滞;所以这里边就涉及到一个对速度的考量,即通过速度来确定需要过滤掉的信号的尺度,而对速度与位置的平滑则直接使用指数平滑(Exponential smoothing)。加上速度判断后,可以针对不同的速度,对滤波的尺度进行不同的设定,从而在快慢速移动时都得到比较优化的效果。结合上述考虑最终实现了一下,得到的效果还是比较理想的(应用实例参考死亡之屋手游版中的武器控制手感)。对应的代码如下:

void LowPassFilter(Vector2 currentPosition, Vector2 currentVelocity, float dt)
{
    if (Mathf.Approximately((currentVelocity - mFilteredVelocity).sqrMagnitude, 0))
    {
        mFilteredVelocity = currentVelocity;
    }
    else
    {
        mFilteredVelocity = FilterKernel(currentVelocity, mFilteredVelocity, Alpha(Vector2.one, dt));
    }

    if (Mathf.Approximately((currentPosition - mFilteredPosition).sqrMagnitude, 0))
    {
        mFilteredPosition = currentPosition;
    }
    else
    {
        Vector2 cutoffFrequency;
        cutoffFrequency.x = mJitterReduction + 0.01f * mLagReduction * Mathf.Abs(mFilteredVelocity.x);
        cutoffFrequency.y = mJitterReduction + 0.01f * mLagReduction * Mathf.Abs(mFilteredVelocity.y);
        mFilteredPosition = FilterKernel(currentPosition, mFilteredPosition, ComputeExpSmoothingFactor(cutoffFrequency, dt));
    }
}

Vector2 ComputeExpSmoothingFactor(Vector2 cutoff, float dt)
{
    float tauX = 1 / (2 * Mathf.PI * cutoff.x);
    float tauY = 1 / (2 * Mathf.PI * cutoff.y);
    float fX = 1 / (1 + tauX / dt);
    float fY = 1 / (1 + tauY / dt);
    fX = Mathf.Clamp(fX, 0, 1);
    fY = Mathf.Clamp(fY, 0, 1);
    return new Vector2(fX, fY);
}

Vector2 FilterKernel(Vector2 current, Vector2 previous, Vector2 expFactor)
{
    float x = expFactor.x * current.x + (1 - expFactor.x) * previous.x;
    float y = expFactor.y * current.y + (1 - expFactor.y) * previous.y;
    return new Vector2(x, y);
}
运行效果动态截图如下(其中的jitterReduction和lagReduction分别设置为1):

其中的蓝色线条为过渡后的轨迹,黄色线条为原始点击的轨迹,圆圈为过滤后的光标位置。

基于Unity3D的路径平滑实现 《一》相关说明 本部分将基于博士的沙漏所介绍的平滑轨迹方法,其中博主已经实现了Matlab版本和Python版本。在本文章中将利用C#语言在Unity3D中实现所介绍的平滑轨迹方法,为后面的机器人在Unity3D导航构建轨迹平滑功能包,打造机器人数字孪生平台,相关实现代码已共享在GitHub,链接: 《二》线性插值 相关理论介绍见博士的沙漏 下面是实现的代码和效果: 线性插值类:LinearInterpolation.cs using System.Collections; using System.C 阅读详情

相关推荐

Unity3D运动轨迹拖动效果(Trail Render)实现

简单描述: 有时为了实现彗星推动彗尾的美妙效果,也为了表现出物体运动的轨迹,需要为物体的轨迹做出标记表明物体的运动。 实现方法:为物体添加Component->Effects->Trail Render组件,为该组件设置你想要让轨迹表现的Material(我用的是FlameD),也可为轨迹指定为显示的颜色。 主要参数介绍: Materials:要显示的纹理图像。

无涯 2万+

触摸屏代码分析——优化措施

在本节里我们针对上一节里程序的不足进行优化: (1)我们需要设置适当的延时,使得按下触摸屏后不马上发生中断,而是延时一段时间,等到电压稳定后再发生中断 (2)我们要在转换完中断里判断是否已经松开,如果松开了,就丢弃数据 (3)在一次按下过程中,进行多次AD转换,去平均值 (4)在打印平均值之前进行过滤,如果有误差太的数据就丢弃这次转换。过滤函数可以自己定义。 下面来看代码: #in

RubyBoss的专栏 1174

Unity之DOTweenPath轨迹移动

Dotween插件是我们平时比较常用的插件,基本上要做小动画,移动之类的都可以用到这个插件(官网这里我不具体讲DOTween怎么使用,这里我只是记录下DOTweenPath的一个常规用法。

类人_猿的博客 6465

android 优化侧滑按钮,Android滑动优化高仿QQ6.0侧滑菜单(滑动优化)

但是之前的实现,只是简单的可以显示和隐藏左侧的菜单,但是特别生硬,而且没有任何平滑的趋势,那么今天就来优化一下吧,加上平滑效果,而且可以根据手势滑动的方向来判断是否是显示和隐藏。首先先来实现手势判断是否隐藏和显示这里就要用到了一个方法了,如下:这个是viewdradhelper里面的方法:/*** 当view被释放的时候处理的事情(松手)** @param releasedchild 被释放的子v...

weixin_33788825的博客 293

Unity实现轮盘方式的按钮滚动效果

近期在项目中,策划给出了一个需求就是,让按钮按照一个轮盘的轨迹进行滑动的效果,经过一番测试,实现了初步的效果。 我这里区分了横向滑动和纵向滑动,这里以纵向滑动为例子进行示范,实现按钮的滑动效果。 首先就是先进行位置初始化: /// ///从大到小排序,Y轴 /// private Comparison ComparisionY = delegate (CircleScrollRectItemBase itemA, CircleScrollRectItemBase itemB)

PySide6 vs PyQt6:新手如何根据Python版本选择GUI库?附版本兼容性测试

本文针对Python GUI开发新手,详细对比了PySide6与PyQt6的核心差异,并提供了基于Python 3.8至3.12等不同版本的兼容性实测数据与选择建议。文章重点分析了版本选择策略,帮助开发者根据自身Python环境、项目需求(如与matplotlib集成)及许可证考量,做出最合适的决策,并附有安装验证与避坑指南。

weixin_29094539的博客 702

Qt实现滑动条平滑效果

【代码】Qt实现滑动条平滑效果。

qq_36651243的博客 959

±10V ADC 输入电路的高共模差分输入电压

这篇文章分析了±10V ADC输入电路的设计需求与挑战,重点讨论了高共模差分输入电压的处理方案。文章首先明确了设计目标,即安全转换±10V差分信号并保持信号完整性,同时克服高共模电压、阻抗匹配和噪声优化等难点。随后详细比较了仪表放大器和差分放大器的性能特点,并提出了器件选型理论。在信号链架构部分,文章通过公式推导阐述了增益设置、共模抑制设计和输入阻抗匹配等关键技术。此外,还建立了噪声源模型,提出了噪声优化措施。最后,文章总结了设计验证方法,并扩展了在工业保护和生物电信号采集等场景的应用。该设计强调根据具体应

泛红尘的博客 1959

Unity地面交互效果——2、动态法线贴图实现轨迹效果

之前说了一个使用局部UV采样来实现轨迹的方法。这一篇在之前的基础上,使用法线贴图进行凹凸轨迹的绘制。

阿赵的博客 3623

利用NURBS曲线进行点云曲面拟合算法

点云拟合曲面算法是将点云数据拟合成一个二次或高次曲面模型的算法。这种算法主要用于三维模型重建、计算机视觉、机器人感知、医学图像处理等领域。最小二乘法(Least Squares Method):通过最小化点到曲面距离的平方和来拟合曲面模型。三角剖分算法(Triangulation-Based Method):将点云构建成三角网格,再拟合成曲面模型。隐式曲面算法(Implicit Surface Method):通过定义一个隐式函数来表示曲面,然后用点云数据来估计隐式函数的系数。

weixin_44770969的博客 1万+

基于STM32单片机的智能分拣系统

基于STM32单片机的智能分拣系统是一种高效、精准的自动化分拣解决方案,适用于物流、仓储、制造业等领域。该系统利用STM32单片机作为核心控制器,结合传感器技术、电机控制算法和通信模块,实现对物品的自动识别、分类和分拣。通过智能化的设计,该系统能够大幅提高分拣效率,降低人工成本,并减少错误率。基于STM32单片机的智能分拣系统是一种高效、精准、低成本的自动化解决方案,能够广泛应用于物流、制造、环保等领域。

qq_62634009的博客 1939

05 触摸算法介绍,电容触摸屏算法

触摸屏一般用于手机、平板、手表、笔记本电脑、车机、白板、工业屏幕(电子产品屏幕)、触控板等,此外单独的触摸按键和触摸屏有联系但技术路线区别较大;触摸屏和显示屏是两个不同的东西,在使用上触摸屏只是和显示屏贴合在一起,它们有各自的驱动芯片,互不关联,只是在软件层将显示坐标和触摸坐标绑定在了一起;触摸屏的种类:电容触摸屏(干扰环境小的普通环境)、电阻触摸屏(用于传导干扰大和有水环境的工业设备上)、超声波触摸屏等;触摸屏的功能:单点触控(普通工业用)、多点触控(消费级)、触摸手势(消费级、触控板等)

qq582880551的博客 2811

UG\NX二次开发 一种获取点的面的方法

有时,我们需要用户选择“面上的点”时,同时获取点所在的面。例如:调标准件、刻字等。通过点击点,ug会创建一个智能对象,可通过函数获得对象的父项,即为点所在的面。下面是封装的函数以及测试例子点在曲线上,获取点所在的曲线同理。UF_UI_point_constructd点对话框 和 block UI对话框都可以使用。

王牌飞行员_里海的博客 1779

unity3d循环滑动_Unity实现3D循环滚动效果

本文实例为大家分享了Unity实现3D循环滚动效果展示的具体代码,供大家参考,具体内容如下然后通过SetDepthAndPosition这个方法,实现图片的空间空间展开Z轴和Y轴,系数是一样的经过上面设置,空间就摆开了using UnityEngine;using System.Collections;using System.Collections.Generic;public class Se...

weixin_31531599的博客 1070

098、C3k2_Ghost:用 GhostConv 替代 C3k2 内标准卷积的轻量化改造代码

本文介绍了用GhostConv轻量化改造YOLOv11中C3k2模块的实践。作者通过线上部署案例引出问题,详细解析了GhostConv的核心实现逻辑,指出直接替换标准卷积会导致的两个关键问题:通道数不匹配和kernel_size冲突。文章提供了完整的C3k2_Ghost实现代码,包含注意事项和调试技巧。消融实验显示,该方法在小模型上可减少27%-28%参数量、34%-35%FLOPs,仅损失0.8mAP。作者总结了适用场景:小模型效果显著,大模型需谨慎;检测小目标任务不推荐;训练时需调整学习率。最后强调sh

sundong_81的博客 62

【WRF-Chem Emissions教程第一期】WRF-Chem 排放概述

WRF-Chem 排放概述

WW、forever的博客 852

Unity中实现在屏幕滑动获取滑动方向

一下代码拷贝过去直接运行就可以使用。。。。。。。。。。。把自己的功能改到Debug处就行 using UnityEngine; using System.Collections; public class jarodInputController : MonoBehaviour { private float fingerActionSensitivity = Screen.wid

FransicZhang的博客 4378

游戏大厂射击游戏无缝大世界游戏DS服务器架构设计方案详解

摘要: 本文深入解析游戏大厂无缝大世界射击游戏的分布式服务器(DS)架构设计方案。以《和平精英》《量子特攻》为例,阐述如何通过动态分区、兴趣管理、弹性扩缩等核心技术应对高并发、低延迟、无缝切换等挑战。架构分为世界协调层、分区计算层、物理判定层等模块,结合微服务化、快照同步和Kubernetes调度,实现玩家跨区无感知迁移与一致判定。重点优化动态负载均衡、状态同步算法及容灾备份,依托分布式数据库与多云部署保障高可用性,为同类游戏提供可扩展的技术范本。(149字) 关键词: 无缝大世界、分布式服务器、动态分区、

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 561

Unity—ScrollRect轨迹滑动

以下内容是根据Unity 2020.1.01f版本进行编写的 Unity—ScrollRect轨迹滑动1、目的3、思考4、自定义实现轨迹滑动5、两种方法的优缺点6、最终效果7、项目工程源代码 1、目的 工作中遇到有需要实现轨迹滑动的滑动列表,通常的做法是计算贝塞尔曲线得出轨迹,但是我觉得计算贝塞尔曲线太麻烦了,或许有没有更简单的方法。   3、思考 轨迹滑动可以分两种情况: 第一种是轨迹滑动是比较简单的横向(或纵向)滑动,其中轨迹不会蜿蜒盘旋,也不涉及列表格子之间的重叠关系,这时可以分区间来对Y轴(或X轴)

weixin_44165354的博客 2007

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

手游跑酷中屏幕上下左右滑动的事件,精准可用(经过多次对比)

using UnityEngine;using System.Collections;public class jarodInputController : MonoBehaviour {private float fingerActionSensitivity = Screen.width * 0.05f; //手指动作的敏感度,这里设定为 二十分之一的屏幕宽度.//private float ...

qq_27748027的博客 1476

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

unity3D 竖向滑动

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class SelectLevelPanel : MonoBehaviour,IBeginDragHandler,ID...

zcc858079762的博客 778

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Unity 图片滑动

Unity Scroll View图片滑动 前言 在多媒体行业中,会有许多关于播放图片的软件诞生,切换图片有比较多的方式,下面介绍比较常用的两种,一个是只切换Image的图片精灵Sprite,一个是带有滑动过程的Scroll View切换,在这个时候unity自带的Scroll View组件就派上用场了。但是Scroll View组件无法自动定位到某一张图片,想要手指滑动一次移动到某一张还是要借助代码的力量。下面就是如何切换图片的两种常用方法: (1)切换图片精灵 这里使用一种比较常用的加载图片的方法,将需

weixin_43541308的博客 7520

Unity --- 滑动条,滚动条和滚动视图

由上往下分别是:滑动条,滚动条和滚动视图。

qq_51947882的博客 9328

Unity—透视滑动列表

以下内容是根据Unity 2020.1.01f版本进行编写的 Unity—透视滑动列表1、目的2、思考3、自定义实现轨迹滑动4、问题5、最终效果6、项目工程源代码 1、目的 有时候,为了实现更好的美术效果,需要实现一些特殊的滑动列表,例如轨迹滑动,也有透视滑动。 注意:本文里所展示的效果是未经测试的试验版,如果用于实际项目中,应该还需要优化代码和测试性能   2、思考 透视滑动列表可以有两种方式来实现: 第一种方法是,通过shader实现,其核心原理是,定义一个中心点坐标(CenterX,CenterY),

weixin_44165354的博客 1246

Unity实现滑动列表(ScrollView)-UGUI

步骤: 第一步 创建一个Image,改名为“ScrollView”。 添加ScrollRect组件,设置组件:把horziontal(水平方向移动)关闭。 添加Mask组件。 第二步 在ScrollView下添加Image,改名为”Viewport“ 第三步 在Viewport下添加Image,改名为“Content”,content的大小最好和viewport一样。 设置锚点为与Pivot如下...

新手小白的博客 8500

unity 点击ui等同于按键输入_Unity基础教程-物体运动(一)——滑动小球(Player-Controlled Motion )...

200+篇教程总入口,欢迎收藏:放牛的星星:[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了​zhuanlan.zhihu.com本文重点内容:1、在平面上放置一个带有拖尾的小球2、基于用户的输入来定位小球的位置3、控制速度和加速度4、限制小球的位置并且让其从边缘反弹这是有关控制角色移动的教程系列的第一部分。具体来说,我们将根据玩家的输入滑动一个球体。本教程是CatLikeCodi...

weixin_39892311的博客 790
上一篇: Unity Notes之协程(Coroutine)简析
下一篇: 几种主流贴图压缩算法的实现原理
BugRunner
博客等级 码龄17年 791粉丝 77原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值