使用Unity检测长按距离
Detecting long press with Unity with distance
我目前正在寻找一种检测长按和点击的解决方案,但我有点迷路,我知道它与 deltaPosition
或 deltaTime
有关。
谁能给我解释一下?我是 Unity 新手。
它是用来拖一个按钮的,所以我会按下按钮几帧,如果我拖它几个像素,它就会进入DRAG_STATE
,如果我点击它,它就会消失进入 TAPPED_STATE
.
备注:
我也要检测距离
无法使用"Touch"功能,需要用鼠标模拟
当你检测到压力时,你就会存储这个位置。在以下帧中,您检查位置是否已更改:
Vector3 position;
void Update(){
if(Input.GetMouseButtonDown(0)) { this.position = Input.mousePosition;}
else if(Input.GetMouseButton(0)){
float distance = Vector3.Distance(this.position, Input.mousePosition);
}
else if(Input.GetMouseButtonUp(0)) { this.position = Vector3.zero }
}
因此在输入时,您只需记录位置,即用户按下按钮的时间。该帧上没有其他任何事情发生。
下一帧,如果用户一直按下,我们比较前一个(初始)位置和当前位置。这是您应该在需要的地方通过该距离的地方。如果距离足够小,你会丢弃阻力或忽略它。
最后,当用户释放按钮时,我们重置为 0。您可能希望重置为某个负值以确保该值不是可用值(虽然 0 不太可能,但并非不可能)。
我目前正在寻找一种检测长按和点击的解决方案,但我有点迷路,我知道它与 deltaPosition
或 deltaTime
有关。
谁能给我解释一下?我是 Unity 新手。
它是用来拖一个按钮的,所以我会按下按钮几帧,如果我拖它几个像素,它就会进入DRAG_STATE
,如果我点击它,它就会消失进入 TAPPED_STATE
.
备注:
我也要检测距离
无法使用"Touch"功能,需要用鼠标模拟
当你检测到压力时,你就会存储这个位置。在以下帧中,您检查位置是否已更改:
Vector3 position;
void Update(){
if(Input.GetMouseButtonDown(0)) { this.position = Input.mousePosition;}
else if(Input.GetMouseButton(0)){
float distance = Vector3.Distance(this.position, Input.mousePosition);
}
else if(Input.GetMouseButtonUp(0)) { this.position = Vector3.zero }
}
因此在输入时,您只需记录位置,即用户按下按钮的时间。该帧上没有其他任何事情发生。
下一帧,如果用户一直按下,我们比较前一个(初始)位置和当前位置。这是您应该在需要的地方通过该距离的地方。如果距离足够小,你会丢弃阻力或忽略它。
最后,当用户释放按钮时,我们重置为 0。您可能希望重置为某个负值以确保该值不是可用值(虽然 0 不太可能,但并非不可能)。