2017-07-28 3 views
0

En utilisant this tutoriel, nous pouvons placer des objets sur la surface par le robinet du doigt.Comment placer des objets en faisant glisser votre doigt sur l'écran?

Comment pouvons-nous changer le script pour placer des objets tout en glissant un doigt sur l'écran, de sorte que placer des objets serait comme «peindre» la zone où ils devraient être placés?

Voici le script pour placer du tutoriel:

using UnityEngine; 
using System.Collections; 

public class KittyUIController : MonoBehaviour 
{ 
    public GameObject m_kitten; 
    private TangoPointCloud m_pointCloud; 

    void Start() 
    { 
     m_pointCloud = FindObjectOfType<TangoPointCloud>(); 
    } 

    void Update() 
    { 
     if (Input.touchCount == 1) 
     { 
      // Trigger place kitten function when single touch ended. 
      Touch t = Input.GetTouch(0); 
      if (t.phase == TouchPhase.Ended) 
      { 
       PlaceKitten(t.position); 
      } 
     } 
    } 

    void PlaceKitten(Vector2 touchPosition) 
    { 
     // Find the plane. 
     Camera cam = Camera.main; 
     Vector3 planeCenter; 
     Plane plane; 
     if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane)) 
     { 
      Debug.Log("cannot find plane."); 
      return; 
     } 

     // Place kitten on the surface, and make it always face the camera. 
     if (Vector3.Angle(plane.normal, Vector3.up) < 30.0f) 
     { 
      Vector3 up = plane.normal; 
      Vector3 right = Vector3.Cross(plane.normal, cam.transform.forward).normalized; 
      Vector3 forward = Vector3.Cross(right, plane.normal).normalized; 
      Instantiate(m_kitten, planeCenter, Quaternion.LookRotation(forward, up)); 
     } 
     else 
     { 
      Debug.Log("surface is too steep for kitten to stand on."); 
     } 
    } 
} 

Répondre

2

lieu de frai un chaton quand la fin touchphase, vous pouvez les reproduire chaque fois que le contact se déplace: TouchPhase.Moved. Soyez averti - cela engendrera BEAUCOUP de chatons pendant que vous faites glisser car ceci est vérifié à chaque image dans la méthode Update(). Envisagez d'ajouter une temporisation ou de ne générer que lorsque le doigt se déplace sur une certaine distance.

void Update() 
    { 
     if (Input.touchCount == 1) 
     { 
      // Trigger place kitten function when single touch moves. 
      Touch t = Input.GetTouch(0); 
      if (t.phase == TouchPhase.Moved) 
      { 
       PlaceKitten(t.position); 
      } 
     } 
    } 

Une vérification à distance pourrait être mis en œuvre comme ceci:

float Vector3 oldpos; 

void Update() 
{ 
    if (Input.touchCount == 1) 
    { 
     Touch t = Input.GetTouch(0); 
     if (t.phase == TouchPhase.Began) 
     { 
      oldpos = t.position; //get initial touch position 
     } 
     if (t.phase == TouchPhase.Moved) 
     { 
      // check if the distance between stored position and current touch position is greater than "2" 
      if (Mathf.Abs(Vector3.Distance(oldpos, t.position)) > 2f) 
      { 
       PlaceKitten(t.position); 
       oldpos = t.position; // store position for next distance check 
      } 
     } 
    } 
} 
+0

Merci beaucoup! Si vous pouviez ajouter une description sur la façon de vérifier la distance où le doigt bougeait, j'apprécierais vraiment ça! Bien que cela ne soit pas inclus dans la question, et aussi je dois vérifier que je ne mets pas les chatons les uns sur les autres, alors je crée une nouvelle question pour résoudre ce problème. – Rumata

+0

La réponse a été modifiée pour inclure une méthode possible de vérification de la distance. – ryeMoss

+0

Merci beaucoup pour cette réponse si détaillée! – Rumata