You need to enable JavaScript to run this app. 使用Touch类计算滑动位移:两种坐标计算方案的差异咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Touch类计算滑动位移:两种坐标计算方案的差异咨询

两种触摸滑动位移实现的核心差异

两种方案的实际计算逻辑

  • 方案一:
if(touchPhase == touchPhase.Began)
{
    touchStart = touch.Position;
}
else if(touchPhase == touchPhase.Ended) {
    Vector2 length = touch.Position - touchStart;
}

逻辑本质是在触摸生命周期的开始阶段,手动缓存手指首次接触屏幕时的有效交互坐标,等触摸结束触发时,用手指离开屏幕时的同基准坐标减去缓存的起始坐标,得到的是手指从按下到抬起全流程的实际滑动总位移。这个计算的两个坐标基准完全统一,结果和业务层感知到的滑动距离完全一致。

  • 方案二:
if(touchPhase == touchPhase.Ended) {
    Vector2 length = touch.RawPosition - touch.Position;
}

逻辑本质是直接取触摸结束瞬间,原始输入坐标和修正后交互坐标的差值,从设计上就没有建立滑动起点的参照,计算结果根本不是滑动位移。

关于RawPosition的认知误区

开发者对官方文档描述的“RawPosition在触摸拖动过程中不会发生变化”普遍存在理解偏差:

这段描述的实际含义是:RawPosition是触摸驱动上报的未经处理的原始坐标值,它和经过系统级校准、边缘防误触偏移、屏幕适配修正后的Position值之间的差值是固定的,不会随拖动过程变化——而不是说RawPosition本身从手指按下到拖动的全程,都会保持手指按下瞬间的坐标值不变。

也就是说,拖动过程中RawPosition和Position都会跟着手指的移动同步变化,只是两者的差值永远等于系统侧的固定修正量。那RawPosition - Position算出来的,永远是这个固定的系统修正值,和实际滑动了多长、往哪个方向滑完全没有关系,根本达不到获取滑动长度的需求。
举个具象的例子:如果系统对边缘触点的固定修正量是X轴方向向内偏移10像素、Y轴方向向内偏移5像素,那不管从屏幕左下角滑到右上角,还是原地不动,这个差值算出来永远是(10,5),和滑动距离没有任何关联。

总结两者的本质区别

  • 方案一:以手动缓存的触摸起始点为参照,计算全流程的相对位移,是真正符合滑动长度获取需求的实现逻辑
  • 方案二:取同一时刻两个坐标值的固定差值,没有滑动起点参照,本质是计算系统坐标修正的补偿值,完全无法实现滑动长度统计的需求

内容的提问来源于stack exchange,提问作者Astigiano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 12:24:00