如何检查Unity中的触摸是否在一定范围内来回移动?
How to check if a touch in Unity is being moved back and forth within a range?
我正在尝试弄清楚如何在 Unity 中检测触摸何时来回移动。
如图所示,我正在寻找一种方法来检测触摸何时从其起始位置 (1) 移动到第二个 x (2),然后返回到起始位置附近的某处 (3) 所有以一定的速度和一定的时间范围,本质上就像一个摇晃的手势。我真的不知道该怎么做。任何帮助将不胜感激。
an illustration of what I mean
到目前为止我只知道如何通过触摸获得起始位置。
Vector2 startingPos;
float shakeTime = 2f;
void Update()
{
foreach(Input.touch touch in Input.touches)
{
if(touch.phase == TouchPhase.Began)
{
startingPos = touch.position;
}
}
}
float touchTimer=0f;
float shakeTime = 2f;
float moveAwayLimit = 1f;
float moveBackLimit = .5f;
bool awayReached = false;
Vector2 startingPos;
void Update()
{
foreach (Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
startingPos = touch.position;
touchTimer = 0;
awayReached = false;
}
if (Vector2.Distance(touch.position, startingPos) > moveAwayLimit && touchTimer < shakeTime && !awayReached)
{
awayReached = true;
}
else if (Vector2.Distance(touch.position, startingPos) < moveBackLimit && touchTimer < shakeTime && awayReached)
{
Shake();
}
touchTimer += Time.deltaTime;
}
}
像这样的东西应该有用,它会检查你是否从一开始就离开了 moveAwayLimit
,然后检查你是否在 startingPos
的 moveBackLimit
之内。
我正在尝试弄清楚如何在 Unity 中检测触摸何时来回移动。
如图所示,我正在寻找一种方法来检测触摸何时从其起始位置 (1) 移动到第二个 x (2),然后返回到起始位置附近的某处 (3) 所有以一定的速度和一定的时间范围,本质上就像一个摇晃的手势。我真的不知道该怎么做。任何帮助将不胜感激。
an illustration of what I mean
到目前为止我只知道如何通过触摸获得起始位置。
Vector2 startingPos;
float shakeTime = 2f;
void Update()
{
foreach(Input.touch touch in Input.touches)
{
if(touch.phase == TouchPhase.Began)
{
startingPos = touch.position;
}
}
}
float touchTimer=0f;
float shakeTime = 2f;
float moveAwayLimit = 1f;
float moveBackLimit = .5f;
bool awayReached = false;
Vector2 startingPos;
void Update()
{
foreach (Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
startingPos = touch.position;
touchTimer = 0;
awayReached = false;
}
if (Vector2.Distance(touch.position, startingPos) > moveAwayLimit && touchTimer < shakeTime && !awayReached)
{
awayReached = true;
}
else if (Vector2.Distance(touch.position, startingPos) < moveBackLimit && touchTimer < shakeTime && awayReached)
{
Shake();
}
touchTimer += Time.deltaTime;
}
}
像这样的东西应该有用,它会检查你是否从一开始就离开了 moveAwayLimit
,然后检查你是否在 startingPos
的 moveBackLimit
之内。