[SOLVED] When touch and drag objects fast (in android), leave dragging.
When touch and drag objects in android fast, leave dragging.
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 public class codigoBola : MonoBehaviour {
 
     public Text debug; // <- aqui arrastro un texto que tengo dentro de un canvas para usarlo a modo de console.log().
     GameObject objeto = null; // <- usare esta variable para saber a objeto se esta haciendo click en ese momento.
     
     // Para el drag:
     Plane plane;
     Vector3 Offset;
 
     void Start() {    
         //Screen.orientation = ScreenOrientation.Landscape;
     }
     
     Ray generateMouseRay(Vector3 touchPosition){
 
         Vector3 touchNear = new Vector3 (touchPosition.x, touchPosition.y, Camera.main.nearClipPlane);
         Vector3 touchFar = new Vector3 (touchPosition.x, touchPosition.y, Camera.main.farClipPlane);
         
         Vector3 tnear = Camera.main.ScreenToWorldPoint (touchNear);
         Vector3 tfar = Camera.main.ScreenToWorldPoint (touchFar);
 
         Ray mr = new Ray ( tnear, tfar - tnear );
         return mr;
     }
 
     void FixedUpdate() {
         if (Input.touchCount > 0) {
             Touch touch = Input.GetTouch(0);
             
             // Ray ray = Camera.main.ScreenPointToRay(touch.position);
             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             RaycastHit hit = new RaycastHit();
 
             // Ray mouseRay = generateMouseRay(touch.position);
             // if(Physics.Raycast(mouseRay.origin, mouseRay.direction, out hit, Mathf.Infinity) && hit.collider.tag == "Draggable" ){
             if(Physics.Raycast(ray, out hit, Mathf.Infinity) && hit.collider.tag == "Draggable" ){
                 objeto =  hit.collider.gameObject;
 
                 ray = Camera.main.ScreenPointToRay(touch.position);
                 float rayDistance;
                 plane = new Plane (Camera.main.transform.forward * -1, objeto.transform.position);
                 plane.Raycast(ray, out rayDistance); 
 
                 if (touch.phase == TouchPhase.Began) {
                     
                     debug.text = "Touched " + objeto.name;
                     plane.Raycast(ray, out rayDistance); 
                     Offset = objeto.transform.position - ray.GetPoint(rayDistance);
                 
                 } else if (touch.phase == TouchPhase.Moved){
                     
                     if (plane.Raycast (ray, out rayDistance)){
                         objeto.transform.position = ray.GetPoint(rayDistance) + Offset;
                         debug.text = "Dragging... " + objeto.name + " " + objeto.transform.position;
                     }
 
                 } else if (touch.phase == TouchPhase.Ended){
                     debug.text = "Ended!";
                 }
 
             }// end physiscs.raycast
 
         } // end if > 0
             
     } // end update
 
 
 
 
 
 } // end class
               Comment
              
 
               
              Answer by zebus · Apr 03, 2017 at 11:53 AM
Solved, this is my new code:
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 public class codigoBola : MonoBehaviour {
 
     public Text debug; // <- aqui arrastro un texto que tengo dentro de un canvas para usarlo a modo de console.log().
     
     // Para el drag:
     GameObject objeto = null;
     Ray ray;
     Plane plane;
     float rayDistance;
     Vector3 Offset;
     bool mouseOver = false;
     bool mousePressed = false;
 
     void Start() {    
         //Screen.orientation = ScreenOrientation.Landscape;
     }
     
     void FixedUpdate() {
         
         if (Input.touchCount > 0) {
             mousePressed = true;
         } else {
             mousePressed = false;
             objeto = null;
             debug.text = "";
         }
         
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit = new RaycastHit();        
 
         if ( Physics.Raycast(ray, out hit, Mathf.Infinity) && hit.collider.tag == "Draggable" ){
             mouseOver = true;
             if (Input.GetTouch(0).phase != TouchPhase.Moved){ // <- con esto evito mover otros objetos mientras muevo el actual.
                 objeto =  hit.collider.gameObject;    
             }
         } else {
             if (mousePressed == false){
                 mouseOver = false;
             }
         }
         if (mouseOver){
             if (mousePressed){
                 plane = new Plane (Camera.main.transform.forward * -1, objeto.transform.position);
                 plane.Raycast(ray, out rayDistance); 
                 objeto.transform.position = ray.GetPoint(rayDistance) + Offset;
                 debug.text = "Arrastrando... " + objeto.name + " " + objeto.transform.position;
             }
         }
             
     } // end update
 
 
 } // end class
Your answer
 
 
             Follow this Question
Related Questions
How can I determine the speed of my touch movements? 0 Answers
Code help with mobile touch drag 3D Top Down 0 Answers
What is the best way to implement a more responsive custom drag event with Scroll Rect? 0 Answers
Touch to move and drag to rotate object 2 Answers
Drag the screen back and forth to left/right level (mobile) 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                