primarytouch和#0 touch 和#1touch的区别
当一次触摸式会触发 primarytouch和#0touch
此时第二根手指触摸触发#1touch
抬起地一根手指#0touch不处罚 只剩#1touch ,primarytouch不会转移到#1touch
此时再次按下第一根手指 会触发#0 touch 只触发了#1touch 仍会触发,primary touch没有触发
结论 一组手指触发时间只会在第一次触摸时会有primary, 第一根指头抬起后,这一组结束前都不会再触发
触发顺序
一般情况下的触发顺序
touch contact
positiong (start只会在第一次触发的时候触发,之后都是prefermed)
start position(start 只会在第一次触发的时候触发,之后都是prefermed)
phase
delta
经过测试,通过player input设置的方式绑定回调方法。
触发顺序不由input action中的顺序控制。
反而由input action中的创建顺序决定。非常bug的方式。
即我先创建了一个action A ,后创建了action B,如果触发方式上,一帧内同时执行,则A会先于B执行。任何方式的修改都不会改变这一现象。
触发把A删除,再重新创建。
官方建议是不要设置任何有关同一帧执行的,和顺序有关的代码
鼠标左键单击
鼠标左键的单机可以兼容interaction中的tap和hold。
猜想:一些简单的控件触发可以都可以兼容tap 和hold。例如在按下后立刻触发start和performed,在抬起后会触发cancled。这些基本可以认为是简单的触发控件。
touchphase
新版的touchphase和旧版的touchphase是不同的类,注意命名空间的不同一个时unityengine,一个是unityengine.inputsystem
设计规范
inputaction中输入的条件判断若能在一个action中实现,则在一个action中实现。
inputaction中条件的判断需要多个实现则要在phase中执行,具体的操作逻辑如果是每帧则在delta中执行
对于多帧同步,第一帧的和状态位置相关的初始值一定要赋值,或做判断
对于移动尽量使用smoothdamp ,优化用户体验。需要做到避免携程重复启用。
携程
yield return null
和yield return new waitframeend()
的区别
yield return null 在某些情况下可能无法被stopcoroutine所阻止