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;  
        }  
    }   //       
}