unity touch关于多指触控需要注意的坑

例如我们将四根手指依次按下屏幕,finger1、finger2、finger3、finger4

此时依照先后顺序 finger1=input.GetTouch(0); finger1.fingerId=0;   ; finger2 = input.GetTouch(1); finger2.fingerId = 1 ;  finger3 = input.GetTouch(2); finger3.fingerId=2 ;finger4 = input.GetTouch(3); finger4.fingerId=3;

要注意,当手指在屏幕上没有离开的生命周期时,它的fingerId是不变的;(如果手指快速连续点击,类似于双击也是不变的)

但是input.GetTouch(index) 这个index索引是可能发生变化的。

测试:

当将手指 finger1 抬起时:

input.GetTouch(index) 中,index发生了变化

finger2=input.GetTouch(0); finger2.fingerId=1; index从1=>0,fingerId不变

finger3=input.GetTouch(1); finger3.fingerId=2; index从2=>1,fingerId不变

finger4=input.GetTouch(2); finger4.fingerId=3; index从3=>2,fingerId不变

当将手指重新按下时(不是指的具体某个手指哟)

finger1=input.GetTouch(0); finger1.fingerId=0; 

finger2=input.GetTouch(1); finger2.fingerId=1; index从0=>1,fingerId不变

finger3=input.GetTouch(2); finger3.fingerId=2; index从1=>2,fingerId不变

finger4=input.GetTouch(3); finger4.fingerId=3; index从2=>3,fingerId不变

将两根手指finger2、finger3抬起时

finger1=input.GetTouch(0); finger1.fingerId=0; index不变,fingerId不变

finger4=input.GetTouch(1); finger3.fingerId=3; index从3=>1,fingerId不变

然后先按下finger3,再按下finger2

finger1=input.GetTouch(0); finger1.fingerId=0; index不变,fingerId不变

finger2=input.GetTouch(2); finger2.fingerId=2; index从1=>2,fingerId从1=>2

finger3=input.GetTouch(1); finger3.fingerId=1; index从3=>1,fingerId从2=>1

finger4=input.GetTouch(3); finger3.fingerId=3; index从3=>1,fingerId不变

经测试得出结论:

1、当手指一直按下时,生命周期未结束,fingerId是不变的。

2、当手指按下时,input.GetTouch(index)对应的索引会可能会发生改变。

3、当多指依次按下时,本质上依照fingerId数组从先到后未被引用的值进行分配,比如fingerID{0,2,3}已经存在,则再按下一个手指,会重新分配fingerID{1}.

4、当多指按下时,中间某指抬起,则它index后面的索引会往前移,比如 input.GetTouch(2) 、fingerId=2,这个手指抬起,那么之后对应input.GetTouch(3)的手指索引变成input.GetTouch(2),fingerId不变。

5、可以理解为,fingerId对应一个数组f1,GetTouch对应数组f2。f2按照f1先后顺序进行复制。比如f1{0,4,5},f2{0,1,2}, 那么对应f2为f2[0]=f1[0]、f2[1]=f1[1]、f2[2]=f1[2]。即input.GetTouch(0)=f1{0}、input.GetTouch(1)=f1{4}、input.GetTouch(2)=f1{5}

猜你喜欢

转载自blog.csdn.net/qq_40097668/article/details/111900159