Unity 3 dタッチパネル携帯電話のスライドイベント(上下左右方向の正確な判断)
5619 ワード
private Vector2 st = Vector2.zero; //
private Vector2 end = Vector2.zero; //
enum slideVector { nullVector,up,down, left, right }; //
private slideVector currentVector = slideVector.nullVector; // null
private float timer;//
public float offsetTime = 0.01f;//
void OnGUI()
{
if (Event.current.type == EventType.MouseDown)//
{
st = Event.current.mousePosition;//
}
if (Event.current.type == EventType.MouseDrag)//
{
timer += Time.deltaTime; //
if (timer > offsetTime)
{
end = Event.current.mousePosition; //
Vector2 slideDirection = st - end;
float x = slideDirection.x;
float y = slideDirection.y;
if (y < x && y > -x)
{
if (currentVector == slideVector.right) //
{
return;
}
Debug.Log("right");
currentVector = slideVector.right; //
}
else if (y > x && y < -x)
{
if (currentVector == slideVector.left)
{
return;
}
Debug.Log("left");
currentVector = slideVector.right;
}
else if (y > x && y > -x)
{
if (currentVector == slideVector.up)
{
return;
}
Debug.Log("up");
currentVector = slideVector.up;
}
else if (y < x && y < -x)
{
if (currentVector == slideVector.down)
{
return;
}
Debug.Log("down");
currentVector = slideVector.down;
}
timer = 0;
st = end;//
}
}
if (Event.current.type == EventType.MouseUp)
{
currentVector = slideVector.nullVector; //
}
}
80 80
enum slideVector { nullVector, up, down, left, right };
private Vector2 touchFirst = Vector2.zero; //
private Vector2 touchSecond = Vector2.zero; //
private slideVector currentVector = slideVector.nullVector;//
private float timer;//
public float offsetTime = 0.1f;//
public float SlidingDistance = 80f;
void OnGUI() // 02
{
if (Event.current.type == EventType.MouseDown)
//
{
touchFirst = Event.current.mousePosition;//
}
if (Event.current.type == EventType.MouseDrag)
//
{
touchSecond = Event.current.mousePosition;
timer += Time.deltaTime; //
if (timer > offsetTime)
{
touchSecond = Event.current.mousePosition; //
Vector2 slideDirection = touchFirst - touchSecond;
float x = slideDirection.x;
float y = slideDirection.y;
if (y + SlidingDistance < x && y > -x - SlidingDistance)
{
if (currentVector == slideVector.left)
{
return;
}
Debug.Log("right");
currentVector = slideVector.left;
}
else if (y > x + SlidingDistance && y < -x - SlidingDistance)
{
if (currentVector == slideVector.right)
{
return;
}
Debug.Log("left");
currentVector = slideVector.right;
}
else if (y > x + SlidingDistance && y - SlidingDistance > -x)
{
if (currentVector == slideVector.up)
{
return;
}
Debug.Log("up");
currentVector = slideVector.up;
}
else if (y + SlidingDistance < x && y < -x - SlidingDistance)
{
if (currentVector == slideVector.down)
{
return;
}
Debug.Log("Down");
currentVector = slideVector.down;
}
timer = 0;
touchFirst = touchSecond;
}
if (Event.current.type == EventType.MouseUp)
{//
currentVector = slideVector.nullVector;
}
} //
}